gpt4 book ai didi

C++ 多态性 : Why is static binding impossible even when the type is obvious

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:25 25 4
gpt4 key购买 nike

我正在学习 C++ 中的虚函数和虚表。但是,我不明白为什么需要动态绑定(bind)。编译器是否没有所有信息来确定函数调用是针对派生函数还是基函数,例如此处:

class Base1 { 
public : virtual void foo()
{ cout << " Base foo \n"; }
};

class Base2 {
public : virtual void foo()
{ cout << " Base2 foo \n"; }
};

class derived : public base1, base 2 {
public : virtual void foo()
{ cout << " derived foo \n"; }
}

int main()
{
derived d;
Base2 *p = &d;
p->foo(); // why can't the compiler figure out that this
// is a function call to the derived function
// foo at compile time?

return 0;
}

最佳答案

why cant compile figure that this is a function call to derived function foo during compile runtime itself?

可以。一些编译器将该调用转换为静态绑定(bind)。

还有其他情况下编译器必须使用动态绑定(bind)

在这个函数中应该调用哪个 foo()

void function( Base* p )
{
p->foo();
}

无法确定*。必须使用动态绑定(bind)。

*编辑:根据我提供的信息。 :)

关于C++ 多态性 : Why is static binding impossible even when the type is obvious,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com