本文主要讲解C++对象模型中的菱形继承的对象模型,分别讨论基类对象变量和函数的继承问题。
何为菱形继承:
菱形继承是指一个基类(Base)派生出两个派生类(Derived1,Derived2),然后这两个派生类(Derived1,Derived2)派生出一个最终的派生类,如1.1的下图所示。
一、菱形继承之非虚继承
1.1类Base、派生类Derived1、派生类Derived2、最终派生类DDerived的UML结构图
1.2类Base、派生类Derived1、派生类Derived2、最终派生类DDerived的代码定义
NonVirtualDerivedDiamondClass.cpp
#include <iostream>
using namespace std;
class Base
{
public:
Base(int x) : x(x) {
}
protected:
int x;
};
class Derived1 : public Base
{
public:
Derived1(int y1) : Base(1), y1(y1) {
}
protected:
int y1;
};
class Derived2 : public Base
{
public:
Derived2(int y2) : Base(1), y2(y2) {
}
protected:
int y2;
};
class DDerived : public Derived1, public Derived2
{
public:
DDerived(int z) : Derived1(11), Derived2(22), z(z) {
}
void callX()
{
cout << this->x << endl