#include#include #include using namespace std; class Father{ public: string father_name; int father_age; Father(string name, int age); //在函数的声明处加上virtual表示该函数是一个虚函数,定义处可加可不加 virtual void show_info(); }; Father::Father(string name, int age): father_name(name), father_age(age) {} void Father::show_info() { std::cout << "父亲的名字是:" << father_name << " 年龄是:" << father_age << std::endl << std::endl;; } class Son:public Father{ public: string son_name; int son_age; Son(string father_name, int father_age, string name, int age); //子类中与父类中函数原型相同的成员函数前面的virtual可加可不加 virtual void show_info(); }; int main(){ Father* F = new Father("王刚", 50); F->show_info(); F = new Son("李军", 60, "李小军", 35);//父类指针指向子类对象 F->show_info(); return 0; } Son::Son(string father_name, int father_age, string name, int age): Father(father_name, father_age), son_name(name), son_age(age) {} void Son::show_info() { std::cout << "父亲的名字是:" << father_name << " 年龄是:" << father_age << std::endl; std::cout << "儿子的名字是:" << son_name << " 年龄是:" << son_age << std::endl; }
加上虚函数构成多态之后的运行结果,达到了我们想要的效果:
如果不加虚函数,构不成多态,指向子类对象的父类指针F调用show_info之后,只访问到了子类的成员变量,但是访问不到子类的成员函数。结果如下:



