c++继承中的虚函数表

本文详细解释了C++中虚函数和多态的关系,通过示例展示了如何查看虚函数表,以及子类如何继承和重写父类的虚函数,包括直接复制、替换和新增虚函数的过程。
摘要由CSDN通过智能技术生成

        c++中,虚函数和多态是密不可分的。一般来说,通常是通过虚函数来实现多态。
 

多态:

        形式上,使用统一的父类指针做处理,但在实际中,这个指针可能指向的子类对象。看起来是调用父类的方法,但是实际中会调用子类的同名方法。


通过虚函数表能更好的理解虚函数的原理:先说下如何查看虚函数表:选中项目,打开属性,项目的命令行配置中添加: /d1 reportSingleClassLayoutSon,然后重新生成该项目。(点生成可能不行)
想查看其他类的虚函数表只需改最后的类名即可,其他的不需要改。
如:我想查看这个项目中Father类的虚函数表,命令行配置中加/d1 reportSingleClassLayoutFather
即可


 

#include<iostream>
using namespace std;

class Father {
public:
	virtual void func1() { cout << "Father::fun1" << endl; }
	virtual void func2() { cout << "Father::fun2" << endl; }
	
public:
	int x = 1;
};
class Mother {
public:
	virtual void handle1() { cout << "Mother::handle1" << endl; }


public:
	int m = 2;

};
class Son :public Father, public Mother {
public:
	void func1() { cout << "Son::func1" << endl; }
	void handle1() { cout << "Son::handle1" << endl; }
	virtual void func3() { cout << "Son::fun3" << endl; }

};



int main(void)
{

	system("pause");
	return 0;
}

现有如上代码,代码较简单,就写在一个文件里了。在命令行配置后重新生成的Son类虚函数表如下:

上述代码中的Son类对父类和母类都进行了继承,在Son类中重写了Father中的func1函数,而Father中的func2函数没有被重写,子类中新写了一个fun3函数,故子类继承完Father类的虚函数表如上图前半部分
同理:Son类继承了Mother类,同时重写了hadale1函数,故有如上图后半部分。

在主函数写如下代码并运行结果如下图,

总结:子类的虚函数表构建过程:

1.直接复制父类的虚函数表

2.如果子类重写了父类的某个虚函数
那么就在这个虚函数表中进行相应的替换

3.如果子类增加了新的虚函数,就把这个虚函数添加到虚函数表中(在尾部添加)

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值