#include
using namespace std;
class Base
{
protected:
int a;
public:
Base() {a = 0;}
};
class Derived1: public Base
{
public:
int c;
};
class Derived2: public Base
{
public:
int c;
};
class DerivedDerived: public Derived1, public Derived2
{
public:
void show() { cout << a; }
};
int main(void)
{
DerivedDerived d;
d.show();
return 0;
}
(A) “ cout << a;”行中的编译器错误
(B) 0
(C)行“类派生派生:公共派生1,公共派生2”中的编译器错误答案: (A)
说明:这是多重继承的钻石问题的典型示例。在这里,基类成员’a’通过Derived1和Derived2继承。因此, DerivedDerived中有两个“ a”副本,这使语句“ cout << a;”变得模棱两可。
C++中的解决方案是使用虚拟基类。例如,以下程序可以正常运行并打印
#include
使用命名空间std;
班级基础
{
受保护的:
诠释
上市:
Base(){a = 0;}
};
类Derived1:虚拟公共基础
{
上市:
int c;
};
类Derived2:虚拟公共基础
{
上市:
int c;
};
class DerivedDerived:公共Derived1,公共Derived2
{
上市:
无效的show(){cout << a; }
};
int main(无效)
{
派生d;
d.show();
返回0;
}这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。