21xrx.com
2024-12-22 22:57:48 Sunday
登录
文章检索 我的文章 写文章
C++运行时多态性
2023-07-04 21:35:19 深夜i     --     --
C++ 运行时 多态性 虚函数

C++是一种面向对象编程语言,具有强大的多态性特征。这种多态性分为编译时多态性和运行时多态性两种。其中运行时多态性是指在程序运行时才决定调用哪个函数的一种特性。

在使用运行时多态性之前,我们需要了解另一个重要的C++特性-虚函数。虚函数是一种特殊的成员函数,通过virtual关键字进行声明。它的实际执行函数由对象的实际类型决定,而不是由指针或引用的类型决定。这就意味着,即使基类的指针或引用指向派生类的对象,调用的仍然是派生类中的虚函数。

为了实现运行时多态性,我们需要使用虚函数。具体过程如下:

1. 创建一个基类,并在其中声明虚函数。

2. 创建一个或多个派生类,并继承基类。在派生类中,重写父类的虚函数,实现特定的功能。

3. 创建一个指向派生类对象的指针或引用,并将其赋值为基类的指针或引用。

4. 通过指针或引用调用虚函数。程序会根据指向对象的实际类型来决定调用哪个函数,实现运行时多态性。

下面是一个示例程序,演示如何使用运行时多态性和虚函数:


#include <iostream>

using namespace std;

class Shape {

public:

  virtual void draw()

    cout << "基类:绘制形状" << endl;

  

};

class Circle : public Shape {

public:

  void draw()

    cout << "派生类:绘制圆形" << endl;

  

};

class Rectangle : public Shape {

public:

  void draw()

    cout << "派生类:绘制矩形" << endl;

  

};

int main() {

  Shape *shape;

  Circle circle;

  Rectangle rectangle;

  shape = &circle;

  shape->draw();

  shape = &rectangle;

  shape->draw();

  return 0;

}

输出结果:


派生类:绘制圆形

派生类:绘制矩形

在上面的示例程序中,我们创建了一个基类Shape,并在其中声明了一个虚函数draw()。接下来,我们创建了两个派生类Circle和Rectangle,并重写了draw()函数,实现绘制圆形和矩形的功能。

在main函数中,我们创建了一个基类指针shape,并将其分别指向派生类Circle和Rectangle的对象。调用shape->draw()函数时,程序会根据其实际指向的对象类型来选择调用哪个虚函数,实现了运行时多态性。

总结来说,使用C++中的运行时多态性特性,需要借助虚函数。我们可以在基类中声明虚函数,在派生类中重写虚函数,再使用指针或引用调用虚函数,从而实现运行时多态性。这种特性在面向对象编程中非常重要,能够使程序更加灵活和可扩展。

  
  

评论区

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