C++ 多重继承 虚继承 虚函数表 多态

C++中的多重继承和虚继承是一个非常重要的概念,也是看你是不是懂C++的一个重要的标志之一。这中间包括了运行时多态,虚函数表等等相关概念。
多重继承,顾名思义,是一个类继承了多个父类。例如class C:public A, publicB{};这样就是一个多重继承。
首先看看多重继承的构造和析构函数。
多重继承的构造函数是先执行父类中的构造函数在执行自己的构造函数,多个父类按照继承顺序来。上面的例子就是先A再B最后C。析构正好相反。
可以显示的在初始化列表中进行构造,也可以不写隐式调用父类的构造函数。例如C():A(),B(){}这样就是显示的。C():B(){}这样就是隐式的调用A构造函数,显示调用B的构造函数了。


运行时多态就是用父类的指针指向子类的对象,调用子类中的函数。在运行时决定调用哪一个函数。运行时多态是与静态多态不同的,静态多态就是函数的重载。
接下来说一下虚继承。虚继承是解决多重继承中的一个非常常见的问题:菱形继承问题。即基类是A,B和C分别继承A,D多重继承B和C。D在构造函数的时候就执行了两个A的构造函数。所以会出现错误的。这个时候就用到了虚继承。
虚继承的用法是这样的:虚继承的类就叫做虚基类。 A就是是虚基类,B和C虚继承A,D中只有一个A对象。
class A{
};
class B:public virtual A{


};
class C:virtual public A{//virtual与public的顺序都可以的


};
class D:public B, public C{


}; 
最后注意,虚基类总是咸鱼非虚基类构造的,与继承的顺序是没有关系的。


还要说的就是虚函数表V-Table的问题。虚函数表是运行时多态的根本上的保障。虚函数是一个类如果它包含虚函数,则该类就会在内存中建立这样一个虚函数表。在运行时,根据虚函数表决定调用哪一个函数。
一个类如果包含虚函数,则它的地址中有4位是虚函数表地址的指针。虚函数表示一块连续的内存。为每一个父类(有虚函数)都会有一个虚函数表。多重继承中,子类的函数放在第一个虚函数表内。详情请看这个链接,他这个将的就非常全面。
http://blog.csdn.net/haoel/article/details/1948051/
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值