/*
*Copyright(c) 2016.烟台大学计算机与控制工程学院
*ALL rights reserved.
*文件名称:test.cpp
*作者:杨驰
*完成日期:2016年5月5日
*问题描述:阅读程序,写出执行结果
*/
#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的基类,其继承类型为public。B,C是派生类D的基类,其继承类型为public。主函数中声明了一个派生类D
的对象,生成对象d时调用了派生类的构造函数,在执行派生类D的构造函数时,先调用基类B,C的构造函数。调用B构造
函数时,A是B的基类,所以先调用A中的构造函数,输出s是class A,接着输出B中的s2是class B。在调用C的构造函数
时,同理。
学习心得:在此程序中,参数比较多,而且重复使用同一变量名,在这样的情况下,我们可以采取贺老师比较提倡的方法 在纸上把
此程序的过程画出来,这样思路会比较清晰,利于分析问题。