1.何为菱形继承?

菱形继承产生的问题及解决

两个子类继承同一个父类,而又有子类又分别继承这两个子类,就如上图说示。

#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;

class A {
public:
    A(){printf("A create.\n");}
    int a;
    virtual void fun(){}
};

class B: public A{
public:
    B(){printf("B create.\n");}
    int b;
    virtual void fun1(){}
};

class C: public A
{
public :
    int c;
    C(){printf("C create.\n");}
    virtual void fun3(){printf("fun3 .\n");}
};

class D:public C,public B{
public:
    int d;
    D(){printf("D create.\n");}
    virtual void fun3(){printf("fun4 .\n");}
}; 
//二义性问题的开销 
int main() {
    D *pd=new D;
    printf("%d\n",sizeof(D));
    getchar();
}
View Code

相关文章: