C++的子类与孙子类都实现了虚函数时,孙子类的实现会覆盖掉子类的实现。
继承的最主要的应用就是把不同的类放到一个数组中,然后遍历调用同名函数。
实例如下:
#include <iostream> #include <stdlib.h> #include <vector> using namespace std; class Parent{ protected: string pname; public: Parent(string name){ pname=name; } virtual void printName(){}; }; class Child: public Parent{ protected: string cname; public: Child(string name):Parent(name){ cname=name; } virtual void printName(){ cout<<"This is child, cname is "<<cname<<", pname is "<<pname<<endl; } }; class GrandChild: public Child{ private: string gname; public: GrandChild(string name):Child(name){ gname=name; } virtual void printName(){ cout<<"This is grandchild, gname is "<<gname<<", cname is "<<cname<<", pname is "<<pname<<endl; } }; int main(){ string name="C"; Child child(name); name="GC"; GrandChild gchild(name); vector<Parent*> mlist; mlist.push_back(dynamic_cast<Parent*>(&child)); mlist.push_back(dynamic_cast<Parent*>(&gchild)); for(int i=0;i<mlist.size();++i){ mlist[i]->printName(); } }
注意子类与孙子类的printName函数前的virtual可加可不加,都可以正确运行……不知道哪个才是正确写法= =