Diamond inheritance and virtual inheritance

Diamond inheritance

In C ++, a class is allowed multiple inheritance, multiple inheritance greatly improves code reuse, reduce code redundancy, greatly enhance the expressiveness of the class, making class closer to the reality of things, to use a more flexible and more object-oriented.
Diamond inheritance case of multiple inheritance is shown below: class A, class X and class derived Y, class X and class Y Z derived classes, then the common base class called Class A, Class Z subclass called confluent.

class A
{
public:
    A(int data) : m_data(data)
    {
        cout << "A构造 : " << this << endl;
    }
protected:
    int m_data;
};

class X : public A
{
public:
    X(int data) : A(data)
    {
        cout << "X构造 : " << this << endl;
    }

    int getData(void) const
    {
        return m_data;
    }
};

class Y : public A
{
public:
    Y(int data) : A(data)
    {
        cout << "Y构造 : " << this << endl;
    }

    void setData(int data)
    {
        m_data = data;
    }
};

class Z : public X, public Y
{
public:
    Z(int data) : X(data), Y(data)
    {
        cout << "Z构造 : " << this << endl;
    }
};

int main(void)
{
    Z z(0);
    z.setData(100);                
    cout << "m_data = " << z.getData() << endl; 

    return 0;
}

Guess you like

Origin www.cnblogs.com/chay/p/10981000.html