The output of a program is a2a3. I understand, that class E has two "base instances", because inheritance from B is not virtual. Can anybody explain why set_c is called from one "base instance" of class B in class E and get_c - from another?
The code is from here: http://www.interqiew.com/ask?ta=tqcpp04&qn=2
#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;
}
 
    