我有2个基类:
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
{ };
和另一个来自C
和D
:
class E
: public C
, public D
{ };
主要是这样的:
int mainHT4_2()
{
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;
}
我的问题是:如果我使用virtual
,为什么输出正在改变?例如:如果我在virtual
和A
中C
使用D
继承,m_n
的值也会在d
中变为3 ,如果我仅在C
或仅D
使用它,它不会改变? (以及其他可能的组合)
virtual
做什么?它是否也使基地的私人成员变得虚拟?