虚继承&多态

虚继承和路径二义性:

当派生类从多个基类派生,而这些基类又从同一个基类派生,则在派生类中访问此共同基类中的成员时,将产生另一种访问不确定性 ——路径二义性
解决方式:虚继承

class B1  { //基类B1
public:
    B1(int i=12):m_b(i){cout<<"constructing B1 "<
多态概念的引出
虚函数--多态实现的条件

1、共有继承
2、虚函数重写
3、父类的指针指向子类对象,或者子类对象初始化父类对象。

问题:

谈谈C++编译器是如何实现多态
谈谈你对重写,重载理解
是否可将类的每个成员函数都声明为虚函数,为什么。
--通过指针VFPTR调用重写函数是在程序运行时进行的,因此需要通过寻址操作才能确定真正应该调用的函数。而普通成员函数是在编译时就确定了调用的函数。在效率上,虚函数的效率要低很多。
因此,没有必要将所有成员函数都声明为虚函数。

构造函数中调用虚函数能实现多态吗 ?为什么?
--不能,对象在创建的时,由编译器对VPTR指针进行初始化
只有当对象的构造完全结束后VPTR的指向才最终确定 ,另外,能实现指针或引用调用吗?

虚函数表指针(VPTR)被编译器初始化的过程,你是如何理解的?
为什么要定义虚析构函数?

纯虚函数和抽象类
练习:
编写一个C++程序, 计算程序员( programmer )工资
1 要求能计算出初级程序员( junior_programmer ) 中级程序员 ( mid_programmer )高级程序员( adv_programmer)的工资
2 要求利用抽象类统一界面,方便程序的扩展, 比如:新增, 计算 架构师 (architect ) 的工资

动态类型转换
const_cast< >
static_cast< >
reinterpret_cast< >
dynamic_cast< >

你可能感兴趣的:(虚继承&多态)