C++ 运行时多态

重载虚函数

#include <iostream>
#include <thread>
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;
}
posted @ 2022-02-15 17:19  develon  阅读(44)  评论(0编辑  收藏  举报