我目前正在学习动态绑定(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/