////////////////////////////////////////////////////////////////////////
下面说说BJ在这个例子中是怎样通过虚拟技术防止Usable类被继承的:
虚拟继承,通过在声明派生类继承父类时加上virtual来指定。
虚拟继承的作用:当系统碰到多重继承的时候保证继承类成员函数的唯一性。
怎么理解他的作用,看下面这个图1:
class base //基类
class derive1 : public base
class derive2 : public base
解决这个问题,就用到了虚拟技术。
修改上面的代码 图2:
class base //基类
class derive1 : virtual public base
class derive2 : virtual public base
class derive3 : public derive1,public derive2
程序代码:
#include <iostream>
using namespace std;
class A
{
public:
A(int a){cout<<"A::Constructor"<<endl;}
};
class B:public virtual A
{
public:
B(int b):A(b){cout<<"B::Constructor"<<endl;}
};
class C:public B
{
public:
C(int c):A(c),B(c){cout<<"C::Constructor"<<endl;}//很显然,A(c)要在初始化列表中写出来
//因此就是C(int)调用A(int),所以在LZ的代码中失败!
};
void main()
{
C c(0);
}
程序代码:
#include <iostream>
using namespace std;
class A
{
public:
A(int a){cout<<"A::Constructor"<<endl;}
};
class B:public virtual A
{
public:
B(int b):A(b){cout<<"B::Constructor"<<endl;}
};
class C:public B
{
public:
C(int c):A(c),B(c){cout<<"C::Constructor"<<endl;}//很显然,A(c)要在初始化列表中写出来
//因此就是C(int)调用A(int),所以在LZ的代码中失败!
};
void main()
{
C c(0);
}