好的,所以我有一个像这样的多态类层次结构:
class Base
{
virtual void show();
};
class DeriveA : Base
{
void show();
};
class DeriveB : Base
{
void show();
};
DeriveA DeriveA_obj;
DeriveB DeriveB_obj;
指针类型Base
Base *bPointer
指向对象类型DeriveB将
bPointer->show();
调用DeriveA_obj.show()和DeriveB_obj.show()?
如果我有一个指针类型DeriveA
DeriveA *dPointer
指向DeriveA的对象类型
dPointer->show();
调用除DeriveA_obj.show()之外的任何内容; ?因为它似乎不应该 但我发誓早些时候做过!
谢谢!
答案 0 :(得分:2)
调用虚方法会在所指向的对象中调用方法的派生版本。如果bPointer->show()
指向DeriveA_obj.show()
,则bPointer
会致电DeriveA_obj
,如果DeriveB_obj.show()
指向bPointer
,则会致电DeriveB_obj
。如果您的DeriveC
类派生自DeriveB
且bPointer
指向DeriveC
个对象,则调用bPointer->show()
会调用DeriveC_obj.show()
if {{ 1}}在show()
中被覆盖。
答案 1 :(得分:1)
不,绝对没有。如果我有一个指针类型Base
Base *bPointer
,指向对象类型DeriveB
。bPointer->show();
会致电DeriveA_obj.show()
和DeriveB_obj.show()
吗?
bPointer
的动态类型为DeriveB
,则只会调用相应的DeriveB::show
函数。反之,如果动态类型为DeriveA
,则会调用DeriveA::show
。
如果我的指针
DeriveA *dPointer
指向对象类型DeriveA
,dPointer->show();
会调用DeriveA_obj.show();
以外的任何内容吗?
同样,你必须看一下动态类型。动态类型为DeriveA
,表示将调用DeriveA::show
。