【发布时间】:2015-09-22 08:28:24
【问题描述】:
我在一次在线测试中发现了以下 c++ 代码。
#include <iostream>
class A
{
public:
A(int n = 2) : m_n(n) {}
public:
int get_n() const { return m_n; }
void set_n(int n) { m_n = n; }
private:
int m_n;
};
class B
{
public:
B(char c = 'a') : m_c(c) {}
public:
char get_c() const { return m_c; }
void set_c(char c) { m_c = c; }
private:
char m_c;
};
class C
: virtual public A
, public B
{ };
class D
: virtual public A
, public B
{ };
class E
: public C
, public D
{ };
int main()
{
E e;
C &c = e;
D &d = e;
std::cout << c.get_c() << d.get_n();
c.set_n(3);
d.set_c('b');
std::cout << c.get_c() << d.get_n() << std::endl;
return 0;
}
代码输出 a2a3 但我不明白。为什么这首先运行不是B类方法模棱两可? E 类也不是虚拟继承的。
【问题讨论】:
-
为什么
B的方法会模棱两可?它不会超载任何东西,所以它真的没有机会模棱两可吗? -
为什么要继承
E?由谁和为了什么? -
"类 E 也不是虚拟继承的" 类
E在这里根本没有继承。
标签: c++ multiple-inheritance virtual-inheritance