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;
}
AI 代码解读

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

virtual int area() = 0;
AI 代码解读

我们可以看到,它没有定义任何的功能实现。在派生类中需要定义该函数的功能实现。在上面的程序中,派生类 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
AI 代码解读

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

目录
打赏
0
0
0
0
11
分享
相关文章
|
10月前
|
【C++20概念】编译时多态性的力量
【C++20概念】编译时多态性的力量
146 0
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
61 4
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
本项目旨在通过C++编程实现一个教学游戏,帮助小朋友认识动物。程序设计了一个动物园场景,包含Dog、Bird和Frog三种动物。每个动物都有move和shout行为,用于展示其特征。游戏随机挑选10个动物,前5个供学习,后5个用于测试。使用虚函数和多态实现不同动物的行为,确保代码灵活扩展。此外,通过typeid获取对象类型,并利用strstr辅助判断类型。相关头文件如&lt;string&gt;、&lt;cstdlib&gt;等确保程序正常运行。最终,根据小朋友的回答计算得分,提供互动学习体验。 - **任务描述**:编写教学游戏,随机挑选10个动物进行展示与测试。 - **类设计**:基类
51 3
|
9月前
|
C++
C++:多态性
C++:多态性
54 2
C++多态性、虚函数、纯虚函数和抽象类知识网络构造
C++多态性、虚函数、纯虚函数和抽象类知识网络构造
|
10月前
|
C++中的多态性
C++中的多态性
96 2
|
10月前
|
C++程序中利用虚函数实现动态多态性
C++程序中利用虚函数实现动态多态性
87 2
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
|
10月前
|
C++程序中的多态性
C++程序中的多态性
33 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等