向一个参数为父对象的函数传递一个子对象会是什么结果?

实验之前的想法:

虽然传递的是子对象,但是在函数中只会使用子对象当中的父对象部分的函数和变量。

实验如下:

(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的父对象部分。

结论:实验结果与之前的猜想一致。

原文地址:https://www.cnblogs.com/ACPIE-liusiqi/p/10602659.html