#include<iostream>
#include<string>
using namespace std;

class animal {

public:
    void virtual speak() {  //设置为虚函数
        cout << "动物在叫" << endl;
    }


};

class Cat:public animal {
public:
    void speak() {
        cout << "猫在叫" << endl;
    }
};

class Dog :public animal {
public:
    void speak() {
        cout << "狗在叫" << endl;
    }
};

void DoSpeak(animal& p) {   //传入父类的引用对象
    p.speak();
}


int main() {
    Dog dog;
    DoSpeak(dog); //当你没用虚函数的时候,这里输出的是动物在叫,这里传入dog实例
}

//当你使用虚函数的时候,子类会重写speak函数,父类的函数会成为指针指向子类的函数
//1.有继承关系  2.子类重写父类函数   3.DoSpeak函数传入对象,父类的指针或引用会指向子类对象

发表回复

后才能评论