次のプログラムの出力が以下の理由を教えてください。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」を取得する理由は何でしょうか?
d.set_c('b')の代わりにc.set_c('b')を使用している場合、O / P: "ab"が表示されます。ここでも、なぜそうなのかわかりません。c、dは両方とも1つのオブジェクトのみを参照しています。
class C:virtual public B{};
class D:virtual public B{};
クラスC、クラスDが仮想的にBから継承されている場合、O/Pは常に「ab」になります。