C++多态及其对象模型

本文深入探讨C++的多态性,包括静态多态和动态多态,重点阐述虚函数在实现动态多态中的作用。同时,介绍了多态的对象模型,包括单继承、多继承以及菱形继承和菱形虚拟继承的细节,分析了虚函数表和对象内存布局,揭示了多态的实现机制。
摘要由CSDN通过智能技术生成

一、多态

所谓多态,就是“多种形态”。

在面向对象的方法中一般是这样描述多态的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。多态性的表现形式之一是:具有不同功能的函数可以用同一个函数名,这样就可以实现用一个函数名调用不同内容的函数。

1.静态多态

#include <iostream>
using namespace std;

int Add(int x, int y)
{
	return x + y;
}

float Add(float x, float y)
{
	return x + y;
}

int main()
{ 
	cout << Add(2, 3) << endl;
	cout << Add(2.3f, 3.4f) << endl;
	return 0;
}
运行结果如下:

静态多态是通过函数重载实现的。由函数重载和运算符重载形成的多态性属于静态多态,要求编译器在程序编译时就知道调用函数的全部信息。静态多态性又称编译时的多态性。静态多态性的函数调用速度快,效率高,但缺乏灵活性,在程序运行前就已经决定了执行的函数和方法。

2.动态多态

C++中虚函数的主要作用就是实现动态多态。简单说父类的指针/引用调用重写的虚函数,当父类指针/引用指向父类对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。

虚函数:类的成员函数前面加上virtual关键字,则这个成员函数称为虚函数。

虚函数的重写:当在子类中定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(覆盖)了父类的这个虚函数。


可以看到:当把基类的某个成员函数声明为虚函数后,允许在其派生类中对该函数重新定义,赋予它新的功能,并且可以通过指向基类的指针指向同一类族中的不同类的对象,从而调用其中的同名函数。

注意:由虚函数实现的动态多态性就是:同一类族中不同类的对象,对同一函数做出不同的响应。动态多态性的特点是:不在编译时确定是哪个函数,而是在程序运行过程中动态的确定操作所针对的对象,它又称运行时多态性。


虚析构函数:

先看如下代码

程序并没有执行派生类的析构函数。如果希望能够执行派生类的析构函数,可以将基类的析构函数声明为虚函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值