C/C++

C++动态绑定和静态绑定

2019-01-11  本文已影响0人  cx7

动态绑定和静态绑定

静态绑定是编译期间就可以确定的类型

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;
}
上一篇 下一篇

猜你喜欢

热点阅读