请告诉我为什么以下程序的输出如下。我没有得到 C++ 中的虚拟类。观察下面的代码:
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: public B
{ };
class D: public B
{ };
class E
: public C
, public D
{ };
int main()
{
E e;
C &c = e;
D &d = e;
std::cout << c.get_c();
d.set_c('b');
std::cout << c.get_c() << std::endl;
return 0;
}
O/P:aa 我希望输出是 ab。得到“aa”的原因是什么?
如果我有 c.set_c('b') 而不是 d.set_c('b') 那么我将得到 O/P :“ab”,在这里,我也不明白为什么会这样。c、d 都只指一个对象。
class C:virtual public B{};
class D:virtual public B{};
如果 C 类、D 类实际上是从 B 继承的,那么 O/P 将始终为“ab”