您的位置:首页 > 其它

名字查找与继承(函数调用的确认)

2013-11-02 18:43 447 查看

理解 C++ 中继承层次的关键在于理解如何确定函数调用。确定函数调用遵循以下四个步骤:

1. 首先确定进行函数调用的对象、引用或指针的静态类型。

2. 在该类中查找函数,如果找不到,就在直接基类中查找,如此循着类的继承链往上找,直到找到该函数或者查找完最后一个类。如果不能在类或其相关基类中找到该名字则调用是错误的。

3. 一旦找到了该名字,就进行常规类型检查,查看如果给定找到的定义,该函数调用是否合法。

4. 假定函数调用合法,编译器就生成代码。如果函数是虚函数且通过引用或指针调用,则编译器生成代码以确定根据对象的动态类型运行哪个函数版本,否则,编译器生成代码直接调用函数。

例如:

已经知道 net_price(int)函数是基类base 中定义的虚函数

Bulk_item bulk;

Item_base item(bulk);

Item_base *p = &bulk;

p->net_price(10);        

调用 net_price 的 Bulk_item 实例因为:对于虚函数而言,通过指向基类对象的指针(引用)进行动态绑定;即调用该指针实际指向的对象所属类型中定义的函数。

item.net_price(10);        

调用 Item_base 实例;因为通过对象调用虚函数,所调用到的总是该对象所属类型中定义的函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: