21xrx.com
2024-12-23 00:19:10 Monday
登录
文章检索 我的文章 写文章
如何在C++中实现多态
2023-07-07 07:11:52 深夜i     --     --
C++ 多态 继承 虚函数 动态绑定

多态是面向对象编程中一个非常重要的概念,可以使程序更加灵活和易于扩展。在C++中,可以通过使用虚函数和指针或引用来实现多态。接下来,我们将详细介绍如何在C++中实现多态。

一、定义基类和派生类

在实现多态前,首先需要定义一个基类和一个或多个派生类。例如:


class Shape {

public:

  virtual void draw() = 0;

};

class Circle : public Shape {

public:

  void draw() std::cout << "Drawing a circle." << std::endl;

};

class Rectangle : public Shape {

public:

  void draw() std::cout << "Drawing a rectangle." << std::endl;

};

上述代码定义了一个基类Shape以及两个派生类Circle和Rectangle。其中,基类Shape中声明了一个纯虚函数draw(),派生类中都实现了这个函数。

二、使用指针或引用访问对象

接下来,可以使用指针或引用访问对象。例如:


Shape* shape;

shape = new Circle();

shape->draw();

shape = new Rectangle();

shape->draw();

上述代码首先定义了一个指向基类Shape的指针shape,并用派生类Circle的对象来初始化它。然后调用shape的draw()函数,由于圆形类实现了这个函数,因此会输出“Drawing a circle.”。接着,通过派生类Rectangle的对象来重新初始化指针shape,再次调用draw()函数,这时输出的是“Drawing a rectangle.”。

另外,也可以使用引用访问对象:


Shape& shape1 = circle;

Shape& shape2 = rectangle;

shape1.draw();

shape2.draw();

这两段代码的效果相同,只是使用方法不一样。通过使用指针或引用,可以实现多态。

三、使用虚函数

除了使用指针或引用,还可以通过使用虚函数来实现多态。虚函数是指在基类中声明了一个虚函数,在其派生类中重新定义了该函数。例如上面的例子,基类Shape中声明了一个纯虚函数draw(),在派生类Circle和Rectangle中都重新定义了该函数。因此,可以通过基类的指针或引用调用派生类的函数。

需要注意的是,只有在基类中将函数声明为虚函数,才能实现多态。例如基类Shape中声明虚函数draw(),在Circle和Rectangle中重新定义该函数时,需要在函数前面加上关键字virtual。

四、使用override关键字

在C++11中,引入了override关键字,可以帮助编译器检查派生类中的虚函数是否与基类中的虚函数匹配。在派生类中重新定义虚函数时,使用override关键字可以显式地表明这是对基类函数的重写,而不是定义了一个新函数。例如:


class Circle : public Shape {

public:

  void draw() override std::cout << "Drawing a circle." << std::endl;

};

class Rectangle : public Shape {

public:

  void draw() override std::cout << "Drawing a rectangle." << std::endl;

};

上述代码中,重新定义了Circle和Rectangle中的draw()函数,并使用了override关键字。这可以确保派生类中定义的虚函数与基类中的虚函数完全匹配。

总之,使用指针或引用访问对象以及使用虚函数是实现多态的两种常见方法。在定义虚函数时,应注意使用virtual关键字,并对派生类中的虚函数使用override关键字。这样可以让程序更加灵活和易于扩展。

  
  
下一篇: C++的乘方函数

评论区

{{item['qq_nickname']}}
()
回复
回复