// newplace.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
class A
{
public:
int x;
A(int a=0){x=a;}
};
class B1: virtual public A
{
public:
int y1;
B1(int a=0,int b=0):A(b)
{
y1=a;
}
void print(void)
{cout<<"B1:x"<<x<<"y1="<<y1<<endl;}
};
class B2:virtual public A
{
public:
int y2;
B2(int a=0,int b=0):A(b)
{y2=a;}
void print()
{cout<<"B2:x="<<x<<"B2:y2="<<y2<<endl;}
};
class C:public B1,public B2
{
public:
int z;
C(int a,int b,int c ,int d,int e):B1(a,b),B2(c,d),A(e)//如果没有A(e),则基类A的x将默认为0;
{z=e;}
void print()
{
B1::print();
B2::print();
cout<<"z="<<z<<endl;
}
};
void main()
{
C c1(100,200,300,400,500);
c1.print();
c1.x=400;
c1.print();
}
1,声明一个虚基类
virtual 继承方式 基类名
2,在派生类B1和B2中只有基类A的一个复制,当改变x的值时,基类B1和B2都将改变
3,虚基类经过一次或者多次的构造函数调用,在其每一个派生类的构造函数中必须对虚基类的构造函数调用,如果没有列出,则调用虚基类的默认构造函数