C++特性——多态性

本文介绍了C++中的多态性,重点讲解了虚函数和虚函数表的概念。通过实例展示了如何使用虚函数实现多态性,强调了虚函数在派生类中的重写及通过基类指针调用派生类函数的重要性。最后,通过代码演示了多态性的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态特性是C++最重要的特性之一,学习C++必须学习这一特性。多态性是指相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。
虚函数是实现多态性的必要条件,只有虚函数才能被重写(重写是指在派生类中重新定义基类中的函数),所以要想学习多态性就要了解虚函数。
虚函数是指在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数。实现多态性时通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数 。
提到虚函数就不得不提虚函数表,而虚函数表又是指什么呢?虚函数表是指指向虚函数地址的指针数组 , 是在编译时构建的。
下面我们通过代码来深入了解一下虚函数和虚函数表!

我们先简单写一个类:

当类中没有虚函数时:

class Father 
{
   
public:
	int fa1;
	int fa2;
	void Two(){
   }
};

此时内存布局很简单
在这里插入图片描述
当类中有一个虚函数时:

class Father 
{
   
public:
	int fa1;
	int fa2;
	virtual void One(){
   }
	void Two(){
   }
};

此时的内存布局为
在这里插入图片描述
可以看出编译时在定义的变量之前自动开辟出一块内存存放一个名为_vfptr的二维指针(void**),指向虚函数的地址,这就可以看作虚函数表,即指向虚函数地址的指针。
理解了什么是虚函数和虚函数表,我们就来看看多态性是怎样利用虚函数来体现的。
基类中的虚函数可以在派生类中被重写,重写后虚函数就可以发生虚函数的覆盖,就可以(在有些情况下)发生派生类虚函数的作用而不发生基类中该函数的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值