虚拟继承使私有成员也变得虚拟?

时间:2014-01-23 14:43:59

标签: c++ inheritance polymorphism

我有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
{ };

和另一个来自CD

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,为什么输出正在改变?例如:如果我在virtualAC使用D继承,m_n的值也会在d中变为3 ,如果我仅在C或仅D使用它,它不会改变? (以及其他可能的组合)

virtual做什么?它是否也使基地的私人成员变得虚拟?

0 个答案:

没有答案