/*
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:main.cpp
*作 者:隋文韬
*完成日期:2016年6月9日
*版 本 号:v1.0
*问题描述:阅读程序
*/
#include<iostream>
using namespace std;
class Base
{
public:
Base(char i)
{
cout<<"Base constructor.--"<<i<<endl;
}
};
class Derived1:virtual public Base
{
public:
Derived1(char i,char j):Base(i)
{
cout<<"Derived constructor.--"<<j<<endl;
}
};
class Derived2:virtual public Base
{
public:
Derived2(char i,char j):Base(i)
{
cout<<"Derived2 constructor.--"<<j<<endl;
}
};
class MyDerived:public Derived1,public Derived2
{
public:
MyDerived(char i,char j,char k,char l,char m,char n,char x):
Derived2(i,j),Derived1(k,l),Base(m),d(n)
{
cout<<"MyDerived constructor.--"<<x<<endl;
}
private:
Base d;
};
int main()
{
MyDerived obj('A','B','C','D','E','F','G');
return 0;
}
<img src="https://img-blog.csdn.net/20160609083051548?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
结果分析:Base是Derived1,Derived2虚基类,Derived1,Derived2是MyDerived的基类,
调用MyDerived时,先调用Base的构造函数,输出Base constructor.--E;
根据顺序,在调用Derived1,因为Base是Derived1的虚基类,只初始化一次,
所以只调用Derived1的构造函数,输出Derived constructor.--D;同理Derived2也是如此;
再调用MyDerived,因为d是Base的数据成员,所以调用Base的构造函数,输出Base constructor.--F;
最后执行Myderived构造函数,输出MyDerived constructor.--G。
十一周阅读程序4
最新推荐文章于 2021-11-29 13:03:17 发布