动态绑定

动态绑定

class Base {
 public:
   void func() {
      cout << "func() in Base." << endl;
   }
   virtual void test() {
     cout << "test() in Base." << endl;
  }
};

class Derived : public Base {
  void func() {
     cout << "func() in Derived." << endl;
  }
  virtual void test() {
     cout << "test() in Derived." << endl; 
  }
};

int main() {
  Base* b;
  b = new Derived();
  b->func();
  b->test();
}

以上代码的运行结果是

func() in Base

func() in Dervied

b是一个基类指针,指向一个派生类对象,基类中有两个函数,一个虚函数test,一个普通函数func。对于test()函数就表现为动态绑定,实际调用的时候是派生类中的test,而func为普通函数,因此是静态绑定,指针类型是什么,就调用该类型相应的函数。

虚函数,动态绑定,运行时多态之间的关系

要触发动态绑定,需要满足两个条件

  • 只有虚函数才能进行动态绑定
  • 必须通过基类类型的引用或者指针进行函数调用

通过基类指针或者引用做形参,当实参传入不同的派生类指针或者引用,在函数内部触发动态绑定,从而实现运行时多态

我感觉这个有点复杂,留待继续学习

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里只属于前端工程师。