C++中的动态绑定问题

来源:互联网 发布:ug倒角编程 编辑:程序博客网 时间:2024/06/03 05:06

关于动态绑定问题,我一直是看了懂,过一段时间又开始模糊了,今天决定把动态绑定问题的脉络给理顺,防止又忘记。

首先,动态绑定发生的条件,这是本文的核心问题,记住这个问题就可以万变不离其宗了:在C++中,当我们使用基类的引用或指针调用一个虚函数是将发生动态绑定。几个关键词是基类指针或引用虚函数。记住这句话再分析几个实际问题就会明白了。

其次是动态绑定的原因:静态类型和动态类型不同。静态类型是变量声明时的类型,在这里就是基类的类型,动态类型是变量内存中的对象类型。例如把基类指针变量赋值为派生类指针的值,就会发生静态类型与动态类型不同的情况。

所以综上可知,发生动态类型的必要条件是基类指针或引用(静态类型),被赋值为派生类的指针或引用(动态类型),且调用了虚函数。

以下是在继承体系中的常见问题

1C++11新标准允许派生类显示的注明那个函数改写了基类的虚函数,具有做法是在该函数的形参列表之后增加override关键字。

2)关键字virtual只能出现在类的内部的声明语句中儿不能出现在类外部函数定义中。

3)虚函数的解析过程发生在运行阶段,普通成员函数发生在编译过程。

4)基类中的静态成员函数在整个继承体系中也具有唯一性。

5C++11中提供了一种防止被继承的方法,在类名后面加上关键字final

6)表达式既不是引用也不是指针,则它的动态类型永远和静态类型一致。

7)不存在从基类向派生类的隐式转换。

8)可以将基类的基类的指针和引用绑定到派生类对象上(基类部分)。

0 0
原创粉丝点击