子类调用父类成员函数的方法:
1、直接在子类重写的函数中调用父类成员函数
#includeusing namespace std; class Animal { public: int m_age; virtual void speak() { cout << "Animal::speak() " << endl; } virtual void run() { cout << "Animal::run() " << endl; } }; class Cat :public Animal { public: int m_life; //重写 void speak() { //在这里调用父类成员函数,直接加父类作用域即可; Animal::speak(); cout << "Cat::speak() " << endl; } void run() { cout << "Cat::run() " << endl; } }; int main() { Animal* p = new Cat(); //这样访问不行 //p->m_life = 10; //这样调用子类的speak()就会调用到父类的speak(); p->speak(); p->run(); getchar(); return 0; }
2、直接用父类的指针调用
#includeusing namespace std; class Animal { public: int m_age; virtual void speak() { cout << "Animal::speak() " << endl; } virtual void run() { cout << "Animal::run() " << endl; } }; class Cat :public Animal { public: int m_life; //重写 void speak() { cout << "Cat::speak() " << endl; } void run() { cout << "Cat::run() " << endl; } }; int main() { Animal* p = new Cat(); //这样访问不行 //p->m_life = 10; p->speak(); //这样就会调用到父类的speak(); p->Animal::speak(); p->run(); getchar(); return 0; }
注意:父类指针指向子类对象时(也就是多态);父类的析构函数必须为虚函数(virtual)才行,这样对象消亡时才会调用子类的析构函数,否则只会调用父类的:
注 :构造函数不能写成虚函数,会报错!
#includeusing namespace std; class Animal { public: Animal() { cout << "Animal::Animal() " << endl; } virtual ~Animal() { cout << "Animal::~Animal() " << endl; } }; class Cat :public Animal { public: Cat() { cout << "Cat::Cat() " << endl; } ~Cat() { cout << "Cat::~Cat() " << endl; } }; int main() { Animal* p = new Cat(); delete p; getchar(); return 0; }



