C++ Primer Plus 13章 类继承(2)

C++ Primer Plus 13章 类继承(2)

1.静态联编和动态联编

将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。

而在编译过程中,编译器通过查看函数参数以及函数名确定使用哪个函数的过程称为静态联编。

在类的继承中,由于虚函数的存在,使得在编译器必须生成能够在哎程序运行时选择正确的虚方法的代码,这被称为动态联编。

C++中总是默认使用静态联编,这是因为静态联编的效率远高于动态联编,尤其是程序中不存在虚函数时。

虚函数工作原理

先给出一段包含虚函数的基类和派生类

class Scientist{
private:
	...
	char name[40];
public:
	virtual void show_name();
	virtual void show_all();
	...
};
classs Phrsicist: public Scientist{
private:
	....
	char field[40];
public:
	virtual void show_field();
	void show_all();
};

编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存来一个指向函数地址数组的指针。这种数组称为虚函数表(vbtl)。

具体的原理可以看下面的图解

组的指针。这种数组称为虚函数表(vbtl)。

具体的原理可以看下面的图解
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值