虚基类

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值