虚基类

    技术2022-05-19  19

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


    最新回复(0)