本文转自 http://hi.baidu.com/haiksn/blog/item/2c4b2ccba290a119bf09e63b.html 以及陈皓的博客 http://blog.csdn.net/haoel/article/details/1948051#
多态性:
- 基类指针可以指向派生类对象,在函数调用时,可以通过基类指针调用派生类的成员函数,从而使基类指针具有“多种形态”,故称为多态。
虚函数:
- 是C++中多态性的一个重要体现
- 利用基类指针访问派生类中的成员函数,这种情况下使用虚函数,这种情况下采用的是动态绑定技术
- 在派生类中一般都要实现一个基类中的虚函数,‘覆盖’它,没有‘覆盖的’虚函数是没有什么意义的
动态绑定:
- 基类指针是调用派生类的中的成员函数?还是调用基类中的成员函数?要到程序运行时确定。主要要看指针所指向的对象。
虚拟继承:
- 解决多重继承中派生类成员函数调用模糊问题。
- 比如类A中有一个函数print(),类B继承A,类C继承A,类D继承类B和类C,这个时候,类D中就有两个print函数,一个是从B继承得到的,一个是从C继承得到的,则,类D的对象调用print函数就会出现print模糊的编译错误。解决办法:类B虚拟继承A。类C虚拟继承A,类D继承B,C时,只拷贝A中的数据成员和函数成员一次,再遇到拷贝时候就忽略了!
以下文字摘自深度探索C++对象模型
- C++在布局以及存取时间上的主要额外负担主要是由virtual引起的:虚函数和虚基类(保证即使多次出现在继承体系中,也仅有一个单一而被共享的实体)