C++ 中的多态性(Polymorphism)

简介: C++ 中的多态性(Polymorphism)

多态性指的是通过类的继承关系,在不同的对象上调用同一成员函数时,可以产生不同的结果。它是 C++ 中的一种强大的特性,可以让程序更加灵活和可扩展。

以下是一个简单的 C++ 多态性实例,我们可以通过继承和虚函数来实现:

#include <iostream>  
using namespace std;

// 基类
class Shape {
   
   protected:
      int width, height;

   public:
      Shape( int a = 0, int b = 0) {
   
         width = a;
         height = b;
      }

      // 纯虚函数
      virtual int area() = 0;
};

// 派生类
class Rectangle: public Shape {
   
   public:
      Rectangle( int a = 0, int b = 0):Shape(a, b) {
    }

      // 实现基类中的纯虚函数
      int area () {
    
         cout << "Rectangle class area :" << endl;
         return (width * height); 
      }
};

class Triangle: public Shape{
   
   public:
      Triangle( int a = 0, int b = 0):Shape(a, b) {
    }

      // 实现基类中的纯虚函数
      int area () {
    
         cout << "Triangle class area :" << endl;
         return (width * height / 2); 
      }
};

// 程序的主函数
int main( ) {
   
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);

   // 存储矩形的地址
   shape = &rec;

   // 调用矩形的求面积函数 area
   cout << shape->area() << endl;

   // 存储三角形的地址
   shape = &tri;

   // 调用三角形的求面积函数 area
   cout << shape->area() << endl;

   return 0;
}

上述代码中,我们定义了一个基类Shape和两个派生类Rectangle和Triangle。Shape 类中的 area() 函数是一个纯虚函数,它的实现在派生类中完成。纯虚函数的声明格式如下所示:

virtual int area() = 0;

我们可以看到,它没有定义任何的功能实现。在派生类中需要定义该函数的功能实现。在上面的程序中,派生类 Rectangle 和 Triangle 分别对基类中的 area() 函数进行了实现。

当我们调用 area() 函数时,程序会根据对象的类型调用相应子类中的 area() 函数,从而产生不同的结果。

我来详细解释一下它的原理:

  • 首先定义了抽象基类 Shape,并在其中声明了纯虚函数 area()。
  • 然后定义了两个派生类 Rectangle 和 Triangle,它们都重新定义了 area() 函数,并根据自己的特点实现了对应的 area() 函数。
  • 在程序主函数中,分别创建了一个 Rectangle 对象和 Triangle 对象,用基类指针 shape 分别指向它们,并调用了它们的 area() 函数。
  • 当调用 shape->area() 时,程序会根据 shape 指向的对象是 Rectangle 对象还是 Triangle 对象,来决定调用哪个 area() 函数,从而产生不同的结果。

我们可以通过输出结果来证明它的效果:

Rectangle class area :
70
Triangle class area :
25

从输出结果可以看出,程序调用了不同的 area() 函数,并产生了不同的结果,这就是多态性的实现。

相关文章
|
7月前
|
安全 编译器 C++
【C++20概念】编译时多态性的力量
【C++20概念】编译时多态性的力量
112 0
|
6月前
|
C++
C++:多态性
C++:多态性
32 2
|
7月前
|
设计模式 算法 编译器
C++中的多态性技术
C++中的多态性技术
|
7月前
|
Serverless C++
C++多态性、虚函数、纯虚函数和抽象类知识网络构造
C++多态性、虚函数、纯虚函数和抽象类知识网络构造
|
7月前
|
存储 C++
C++中的多态性
C++中的多态性
68 2
|
7月前
|
C++ 开发者
C++程序中利用虚函数实现动态多态性
C++程序中利用虚函数实现动态多态性
62 2
|
7月前
|
Serverless C++ 容器
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
|
7月前
|
编译器 C++
C++程序中的多态性
C++程序中的多态性
24 0
|
7月前
|
C++
C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类
C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类
|
7月前
|
存储 安全 C语言
C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数
C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数