虚继承、虚函数继承

http://topic.csdn.net/u/20070929/11/1376eb28-ca67-48cf-b1dc-374b9b9a8bf3.html

虚继承是为了在多继承的时候避免引发歧义,比如类A有个就是a,B继承了A,C也继承了A,当D多继承B,C时,就会有歧义产生了,所以要使用虚拟继承避免重复拷贝。
虚函数继承是解决多态性的,当用基类指针指向派生类对象的时候,基类指针调用虚函数的时候会自动调用派生类的虚函数,这就是多态性,也叫动态编联。

通俗的讲,虚继承就是为了节约内存的,他是多重继承中的特有的概念。适用与菱形继承形式。
如:类B、C都继承类A,D继承类B和C。为了节省内存空间,可以将B、C对A的继承定义为虚拟继承,此时A就成了虚拟基类。
[cce_cpp]
class A;
class B:public vitual A;
class C:public vitual A;
class D:public B,public C;
[/cce_cpp]

虚函数继承就是覆盖。即基类中的虚函数被派生类中的同名函数所覆盖。
[cce_cpp]
class parent
{
public:
vitual void foo(){cout<<“foo from parent”;};
void foo1(){cout<<“foo1 from parent”;};
};
class son:public parent
{
void foo(){cout<<“foo from son”;};
void foo1(){cout<<“foo1 from son”;};
};
int main()
{
parent *p=new son();
p->foo();
p->foo1();
return 0;
}
[/cce_cpp]
其输出结果是:
foo from son,foo1 from parent

发布者

adaier

奔四。 好骑车,拍照,背包旅行和各种折腾。 最近的爱好应该是宅。 正努力充电正能量。