动态绑定和静态绑定
静态绑定是编译期间就可以确定的类型
Base *ctx = new Base(); //ctx的类型只能是Base
动态绑定则只能在运行时确定
Dev是Base的派生类
Base *ctx = new Dev(); //ctx的静态类型是Base 动态类型却是Dev
用C++描述轿车和卡车 可以抽象出这样的模型
抽象的车 : 需要加油
汽车 : 需要加93号汽油
卡车 : 需要加柴油
汽车和卡车都是抽象的车的实现 在对外提供接口时 当然提供抽象的车作为接口
外部使用者只需要知道抽象车的概念 明确提供一个加油的接口 至于加什么油 不需要关心
抽象的车
class base {
public:
virtual void addOil() {
//加油
}
};
轿车
class car : public base{
public:
void addOri() {
//加汽油
}
};
汽车
class DieselCar : public base {
public:
void addOri() {
//加柴油
}
}
int main() {
Base *a = new car(); //静态类型Base 动态类型car
Base *b = new DieselCar(); //静态类型Base 动态类型DieselCar
a->addOri();
b->addOri();
delete a;
delete b;
return 0;
}