21xrx.com
2024-11-22 03:24:29 Friday
登录
文章检索 我的文章 写文章
C++中的动态多态性实现
2023-07-11 22:36:42 深夜i     --     --
C++ 动态多态性 实现

C++是一门支持多态性的面向对象编程语言,其中的动态多态性更是让程序员可以在运行时选择对象的类型和方法的实现。要了解C++中的动态多态性实现,我们需要先了解C++的虚函数和虚表。

C++中的虚函数是为了实现动态多态性而设计的。虚函数是通过使用虚函数声明来实现的。在类的声明中,如果将虚函数声明为“virtual”,那么该函数就成为了虚函数。虚函数的调用不是在编译时确定的,而是在运行时根据对象的类型进行选择,这就是所谓的动态绑定。

C++中的虚表是一个包含所有虚函数指针的指针数组。每个类都有自己的虚表,虚表的顺序和虚函数的声明顺序一样。每个对象都有一个指向其对应的虚表的指针,当程序调用一个虚函数时,它会根据对象指针找到该对象的虚表,然后根据虚函数的索引在虚表中找到对应的函数指针,再执行该函数。

实现动态多态性的步骤如下:

1.在父类中定义虚函数;

2.在子类中用相同的函数原型重新定义这个函数,这个函数也是虚函数;

3.创建对象时,用子类对象来代替父类对象;

4.当调用这个虚函数时,程序会根据对象的类型自动决定使用哪个版本的函数。

下面是一个具体例子:


#include<iostream>

using namespace std;

class Shape

{

  public:

    virtual double calculateArea() = 0;

};

class Rectangle:public Shape

{

  private:

    double length;

    double width;

  public:

    Rectangle(double l,double w)

    

      length=l;

      width=w;

    

    double calculateArea()

    {

      return length*width;

    }

};

class Circle:public Shape

{

  private:

    double radius;

  public:

    Circle(double r)

    

      radius=r;

    

    double calculateArea()

    {

      return 3.14*radius*radius;

    }

};

int main()

{

  Shape *shape;

  Rectangle rec(10,7);

  Circle cir(5);

  shape=&rec;

  cout<<"矩形面积为:"<<shape->calculateArea()<<endl;

  shape=&cir;

  cout<<"圆形面积为:"<<shape->calculateArea()<<endl;

  return 0;

}

在这个例子中,`Shape`是一个抽象类,其中的`calculateArea`函数被声明为虚函数。`Rectangle`和`Circle`是`Shape`的子类,它们都重新定义了`calculateArea`函数并实现了自己的计算面积方法。在`main`函数中,我们创建了一个指向`Shape`对象的指针`shape`,并使用`Rectangle`和`Circle`对象分别给`shape`赋值。当我们调用`calculateArea`函数时,程序会自动调用正确的版本。这就是C++中动态多态性的实现。

总的来说,C++中的动态多态性是通过虚函数和虚表实现的。使用动态多态性可以让程序更加灵活和可扩展。当然,在实际开发中,需要谨慎使用,因为虚函数调用会比普通函数调用多出一定的开销。

  
  

评论区

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