欢迎来到军工软件开发人才培养基地——学到牛牛

如何理解C++中的多态?

时间:2024-05-06 07:01:10 来源:学到牛牛

C++中的多态是面向对象程序设计中的一种重要概念,它允许不同类型的对象对相同的消息做出不同的响应。多态是通过派生类继承基类的虚函数来实现的。

 

1680139128143.jpg

 

在C++中,多态有两种形式:静态多态和动态多态。其中,静态多态是指函数重载,而动态多态则是指虚函数实现的运行时多态。

 

静态多态

 

静态多态是指函数的重载,它可以使得一个函数名可以代表不同的功能。这样,在编译时就会根据调用参数的不同来选择正确的函数进行调用。

 

例如,我们可以定义一个名为 sum 的函数,它可以接收不同数量和类型的参数,从而实现加法操作。通过使用函数重载,可以重复使用函数名 sum,避免了代码冗余。

 

int sum(int a, int b) { return a + b; }

double sum(double a, double b) { return a + b; }

动态多态

 

动态多态是指利用虚函数实现的运行时多态。在C++中,可将基类指针或引用指向派生类对象,并调用其虚函数,从而实现运行时动态绑定。这种方式下,程序会根据对象的实际类型来选择正确的函数进行调用,从而实现多态。

 

class Shape {

   public:

      virtual double getArea() = 0;

};

 

class Rectangle: public Shape {

   public:

      double getArea() { return width * height; }

   private:

      int width;

      int height;

};

 

class Triangle: public Shape {

   public:

      double getArea() { return 0.5 * base * height; }

   private:

      int base;

      int height;

};

 

int main() {

    Shape* shape = new Rectangle();

    std::cout << "Area of Rectangle is: " << shape->getArea() << std::endl;

 

    shape = new Triangle();

    std::cout << "Area of Triangle is: " << shape->getArea() << std::endl;

 

    return 0;

}

在上面的示例中,我们定义了一个基类 Shape,其中包含一个纯虚函数 getArea()。然后,我们定义了两个派生类 Rectangle 和 Triangle,它们分别实现了 getArea() 函数。

 

在 main() 函数中,我们首先将一个基类指针指向一个 Rectangle 对象,并调用其虚函数 getArea(),输出矩形的面积。然后,我们将同一个基类指针指向一个 Triangle 对象,并再次调用 getArea() 函数,输出三角形的面积。由于 getArea() 是虚函数,所以程序会根据对象的实际类型选择正确的函数进行调用,从而实现动态多态。