C++之:函数调用的名字查找与继承

来源:互联网 发布:好搜seo 好搜索引擎 编辑:程序博客网 时间:2024/05/21 13:21

    以下内容摘抄于《C++ Primer中文版》:

    理解函数调用的解析过程对于理解C++的继承至关重要,假定我们调用p->mem()(或者obj.mem()),则依次执行一下4个步骤:

    (1)首先确定p(或obj)的静态类,该静态类型是类类型。

    (2)在p(或obj)的静态类型对应的类中查找mem,如果找不到,则依次在直接基类中不断查找,直至到达继承链的顶端,如果找遍了该类及基类都找不到,则编译器报错。

    (3)一旦找到了mem,就进行常规的类型检查,以确认对于当前找到的mem,本次调用是否合法(是public还是private或者protected)

    (4)假设调用合法,则编译器将根据调用的是否是虚函数而调用不同的代码

     ——如果mem是虚函数并且我们是通过引用或指针进行调用,则编译器产生的代码将在运行时确定到底运行该虚函数的哪个版本,此时就要根据对象的动态类型了。

     ——反之,如果mem不是虚函数或者我们是通过对象(而非引用或指针)进行的调用,则编译器将产生一个常规函数的调用。

0 0
原创粉丝点击