重载虚函数
#include
#include
using namespace std;
class Animal {
protected: string name;
public: Animal(string name) {
cout << "Animal()" << endl;
this->name = name;
}
// public: void greeting() {
public: virtual void greeting() { <--- 如果不是虚函数,就不会查询指针指向的函数表,只会调用基类函数
cout << "I'm the animal, call me '" << this->name << "'." << endl;
}
};
class Dog : public Animal {
public: Dog(string name) : Animal(name) {
cout << "Dog()" << endl;
}
// public: void greeting() override {
public: void greeting() {
cout << "I'm the dog, call me '" << this->name << "'." << endl;
}
};
class Cat : public Animal {
public: Cat(string name) : Animal(name) {
cout << "Cat()" << endl;
}
// public: void greeting() override { <--- 可以使用override关键字明确指定是重载虚函数
public: void greeting() {
cout << "I'm the cat, call me '" << this->name << "'." << endl;
}
};
int main() {
Animal *what = new Dog(string("shibainu"));
what->greeting();
delete what;
what = new Cat(string("niaoniao"));
what->greeting();
delete what;
return 0;
}