我目前正在学习动态绑定(bind)和虚拟功能。摘自Accelerated C++第13章:



我不明白在编译时对象类型可能是未知的想法。从源代码中不明显吗?

最佳答案

一点也不。考虑以下示例:

struct A {
  virtual void f() = 0;
};

struct B : A {
  virtual void f() { std::cerr << "In B::f()\n"; }
};

struct C : A {
  virtual void f() { std::cerr << "In C::f()\n"; }
};

static void f(A &a)
{
  a.f(); // How do we know which function to call at compile time?
}

int main(int,char**)
{
  B b;
  C c;
  f(b);
  f(c);
}

编译全局函数f时,无法知道应该调用哪个函数。实际上,它每次都需要调用不同的函数。第一次使用f(b)调用时,将需要调用B::f(),第二次使用f(c)调用时,将需要调用C::f()

关于c++ - 在编译时如何未知对象类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18394106/

10-17 00:30