虚基类

来源:互联网 发布:java spring编程实例 编辑:程序博客网 时间:2024/05/21 17:30

 // 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,虚基类经过一次或者多次的构造函数调用,在其每一个派生类的构造函数中必须对虚基类的构造函数调用,如果没有列出,则调用虚基类的默认构造函数

原创粉丝点击