十一周——继承与派生——阅读程序(3)

来源:互联网 发布:北京淘宝供货商 编辑:程序博客网 时间:2024/05/18 01:49

程序代码:

#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<<"Derived1 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;}


 

预计结果:

Base constructor. --E

Derived2 constructor.--B

Derived1 constructor. --D

Base constructor. --F

MyDerived constructor. --G

运行结果:

错误分析:

在调用虚基类的构造函数时,只有最后的的派生类会调用虚基类的构造函数,即开始输出虚基类的内容,而后有一个最后的派生类对虚基类的初始化,所以也会进行输出,还有一点就是两个派生类的顺序即使在初始化时故意调换,但是还是会按照定义派生类的顺序输出

 

0 0
原创粉丝点击