gpt4 book ai didi

c++ - 在代码中解释继承?

转载 作者:太空狗 更新时间:2023-10-29 23:25:28 28 4
gpt4 key购买 nike

有这段代码:

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();
}

OUTPUT: der1 test1//打印成功

但是为了

int main()
{
Der3 d;
d.test2();
}

它给出了无法访问 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();
}

它输出:der2 Test2

谁能解释一下这里发生了什么?

最佳答案

应该是:

class Der3:public Der2, public Der1{ 

如果您不指定访问限定符,则默认为私有(private)。

另外,因为在 Der3 中继承的两种类型具有共同的基础,所以您应该在 Der1 和 Der2 中使用虚拟继承。这避免了复制公共(public) Base 成员(如果有的话)。

class Der1:public virtual Base{...   
class Der2:public virtual Base{...

关于c++ - 在代码中解释继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24957687/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com