Name Lookup and Inheritance

Understanding how function calls are resolved is crucial to understanding inheritance in C++. Given the call p->mem()(or obj.mem()), the following fours steps happen:

  1. First determine the static type of p(or obj). Because we’re calling a member, that type must be a class type.


  2. Look for mem in the class that corresponding to the static type of p(or obj). If mem is not found, look in the direct base class and continue up the chain of classes until mem is found or the last class is searched. If mem is not found in the class or its enclosing base classes, then the call will not compile.


  • Once mem is found, do normal type checking to see if this call is legal given the definition that was found.


  • Assuming the call is legal, the compiler generates code, which varies depending on whether the call is virtual or not:

    • If mem is virtual and the call is made through a reference or pointer, then the compiler generates code to determine at run time which version to run based on the dynamic type of the object.


    • Otherwise, if the function is nonvirtual, or if the call is an object(not a reference or pointer), the compiler generates a normal function call.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值