1、原理:
先剖析Animal类的:
class Animal {
public:
virtual void speak() {
cout << "动物发出了声音" << endl;
}
};
再剖析猫类的:
class Cat : public Animal {
public:
};
子类继承父类中所有内容
但是这里子类重写父类的虚函数,
class Cat : public Animal {
public:
void speak() override {
cout << "小猫喵喵叫" << endl;
}
};
子类中的虚子函数内部会替换(覆盖)成子类的虚函数地址:
vftable
&Cat::speak
2、计算器实现
#include <iostream>
using namespace std;
#include <string>
//利用多态实现计算器
class AbstractCaculator {
public:
virtual int getResult() {
return 0;
}
int num_1;
int num_2;
};
//加法计算器类
class AddCaculate:public AbstractCaculator {
public:
int getResult() {
return num_1 + num_2;
}
};
//乘法计算器类
class MulCaculate :public AbstractCaculator {
public:
int getResult() {
return num_1 * num_2;
}
};
int main() {
AbstractCaculator* abc = new AddCaculate;
abc->num_1 = 10;
abc->num_2 = 10;
cout << "和" << abc->getResult() << endl;
delete abc;
return 0;
}
getRsult()类重写了,但是变量num_1和num_2不需要重新写一遍。