gui*_*eek 2 c++ multiple-inheritance
有这个代码:
class Base{
public:
void disp(){
cout<<"base"<<endl;
}
};
class Der1:public Base{
public:
void test1(){
cout<<"der1 test1"<<endl;
}
};
class Der2:public Base{
public:
void test2(){
cout<<"der2 test2"<<endl;
}
};
class Der3:public Der1,Der2{
public:
void fun(){
cout<<"Der3 fun"<<endl;
}
};
int main()
{
Der3 d;
d.test1();
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:der1 test1 //成功打印
但对于
int main()
{
Der3 d;
d.test2();
}
Run Code Online (Sandbox Code Playgroud)
它给出了Der2无法访问的错误......
但是,当我将代码更改为
class Base{
public:
void disp(){
cout<<"base"<<endl;
}
};
class Der1:public Base{
public:
void test1(){
cout<<"der1 test1"<<endl;
}
};
class Der2:public Base{
public:
void test2(){
cout<<"der2 test2"<<endl;
}
};
class Der3:public Der2,Der1{ //***changed the order here***
public:
void fun(){
cout<<"Der3 fun"<<endl;
}
};
int main()
{
Der3 d;
d.test2();
}
Run Code Online (Sandbox Code Playgroud)
它输出:der2 Test2
有人能解释一下这里发生了什么吗?
它应该是:
class Der3:public Der2, public Der1{
Run Code Online (Sandbox Code Playgroud)
如果未指定访问限定符,则默认为private.
另外,因为您在Der3中继承了两种类型的公共基础,所以您应该在Der1和Der2中使用虚拟继承.这样可以避免复制公共Base成员(如果有的话).
class Der1:public virtual Base{...
class Der2:public virtual Base{...
Run Code Online (Sandbox Code Playgroud)