详细了解C++多态

什么是多态??

1.多态性(polymorphism)据说最早来自希腊语,从字面上理解就是多种形态,多种形式。具体到C++这种面向对象的语言(OOP)中,其实就是一种“接口”,多种实现(方法)

2.多态可以分为静多态和动多态,具体的分类如下

这里写图片描述

3.静多态和动多态的区别:

其实只是区别什么时间将函数实现和函数调用关联起来,是在编译期还是在运行期,即函数地址是在早绑定还是晚绑定的??

①静多态是指在编译期就可以确定函数的调用地址,并产生代码,这就是静态的,也就是说地址是早早绑定的,静多态往往也被叫做静态联翩。

②动多态则是指函数调用的地址不能在编译期间确定的,必须要在运行时才能确定,这就属于晚绑定,动多态往往也被叫做动态联翩。

4.具体实现

静多态往往是通过函数重载和模板(泛型编程)来实现,具体 见一下代码:

//两个函数构成重载的静多态

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

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

//构成函数重载的条件:相同函数名
//函数模板(泛型编程)
template <typename T>
//temolate<class T>
T add(T a,T b)
{
    return a + b;
}

多态存在的意义

C++中的几大特性:继承,封装,多态。封装可以是的代码模块化,继承可以使在原有的代码基础上扩

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的C++多实验报告,以演示如何使用虚函数实现多性。 实验目的: 1. 了解C++中多性的概念和实现方式; 2. 熟悉虚函数和纯虚函数的使用方法; 3. 学习如何通过多性实现代码的复用和扩展。 实验原理: C++中的多性是指不同的对象以各自不同的方式响应相同的消息。实现多性的方式包括虚函数和纯虚函数。虚函数是在基类中声明的一个虚函数,在派生类中重新定义该函数,实现多性。当基类指针指向派生类对象时,调用虚函数时会根据对象的实际类型来调用正确的函数实现。纯虚函数是在基类中声明的一个函数,没有函数体,只是用来定义接口。派生类必须实现该函数才能被实例化,实现了接口的统一,也是实现多性的一种方式。 实验步骤: 1. 定义一个基类Shape,包含两个数据成员width和height,以及一个虚函数area(); 2. 定义两个派生类Rectangle和Triangle,分别重写基类的虚函数area(); 3. 在main函数中,定义一个Shape指针,分别指向Rectangle和Triangle对象,并调用它们的area()函数; 4. 编译运行程序,观察输出结果。 实验代码: ``` #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() { cout << "Parent class area :" <<endl; return 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 shape->area(); // 存储三角形的地址 shape = &tri; // 调用三角形的求面积函数 area shape->area(); return 0; } ``` 实验结果: ``` Rectangle class area : Triangle class area : ``` 可以看到,通过使用虚函数,我们可以让不同的对象以不同的方式响应相同的消息,实现了多性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值