编辑文章 - 博客频道 - CSDN.NET

来源:互联网 发布:微信公众平台java源码 编辑:程序博客网 时间:2024/06/13 12:58

1. 虚拟继承是为了防止菱形继承间接派生类含有多份虚基类成员数据

2. 虚拟继承虚基类的初始化应该由最底层的派生类显示负责

源代码:

// virtual_inherited.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;/************************************************************************//* 虚继承:*//************************************************************************/class Base{public:Base(int a):a(a){cout<<"Base()"<<endl;}void display(){cout<<"a = "<<a<<endl;}private:int a;};class DerivedB:virtual public Base{public:DerivedB(int a,int b):Base(a),b(b){cout<<"DerivedB()"<<endl;}private:int b;};class DerivedC:virtual public Base{public:DerivedC(int a,int c):Base(a),c(c){cout<<"DerivedC()"<<endl;}private:int c;};class DerivedD:public DerivedC,public DerivedB//构造按继承顺序{public:DerivedD(int a,int b,int c,int d):Base(d),DerivedB(a,b),DerivedC(a,c),d(d){cout<<"DerivedD()"<<endl;}private:int d;};void main(){DerivedD d(1,2,3,4);d.Base::display();}
运行结果:

Base()
DerivedC()
DerivedB()
DerivedD()
a = 4
请按任意键继续. . .

0 0
原创粉丝点击