您的位置:首页 > 其它

第十周,十一周阅读项目-继承与派生-3

2016-04-28 09:05 393 查看
/*
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:main.cpp
*作    者:刘涛
*完成日期:2016年4月23号
*版 本 号:v1.0
*
*问题描述:继承与派生
*/
#include <iostream>
using namespace std;
class A
{
public:
A(char *s){cout<<s<<endl;}
};
class B:public A
{
public:
B(char *s1, char *s2):A(s1){
cout<<s2<<endl;
}
};
class C:public A
{
public:
C(char *s1,char *s2):A(s1){
cout<<s2<<endl;
}
};
class D:public B, C
{
public:
D(char *s1,char *s2,char *s3,char *s4):
B(s1,s2),C(s3,s4){cout<<s4<<endl;}
};
int main()
{
D d("class A","class B","class C","class D");
return 0;
}


运行结果:



过程分析:A是B,C的基类,B,C又是D的基类。一开始调用D的构造函数,由于B是D的基类,所以调用B类中的构造函数赋初值,然而A又是B的基类,所以又给A中的构造函数赋初值,输出s是class A,然后输出B中的s2为class B。一样的道理,由于C是D的基类,所以调用C类中的构造函数赋初值,然而A又是C的基类,所以又给A中的构造函数赋初值,输出s是class C,然后输出C中的s2为class D,最后输出s4为class D。需要注意的是,此题中各个参数弄得比较混乱,有重复使用同一变量名的情况。需要我们看清不同的同一变量名的数据成员。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: