实验之前的想法:
虽然传递的是子对象,但是在函数中只会使用子对象当中的父对象部分的函数和变量。
实验如下:
(1)首先定义一个Teacher类:
class Teacher
{
private:
string name;
char sex;
public:
Teacher(string na, char s){
name = na;
sex = s;
}
void show(){
cout<<"The teacher's name: "<<name<<". sex: "<<sex<<endl;
}
};
(2)再定义一个ChineseTeacher子类:
class ChineseTeacher:public Teacher
{
private:
string discipline;
public:
ChineseTeacher(string na, char s, string dis):Teacher(na,s){
discipline = dis;
}
void say(){
cout<<"I am a ChineseTeacher"<<endl;
}
void show(){
Teacher::show();
cout<<"discipline: "<<discipline<<endl;
}
};
(3)定义一个调用父类对象的函数:void Fun(Teacher *t);
void Fun(Teacher *t)
{
t->show();
}
(4)主函数:
int main()
{
Teacher t("mayun",'m');
ChineseTeacher ct("mahuateng",'m',"Chinese");
Fun(&t);
Fun(&ct);
}
实验结果:
第二行只输出了”mahuateng”和”m”,而没有输出” discipline: Chinese”。由此可见,当把ChineseTeacher类的对象ct传递给Fun()时,该函数只会调用ct的父对象部分。
结论:实验结果与之前的猜想一致。