使用多个派生类调用基类成员函数

时间:2014-01-12 00:46:28

标签: c++ class inheritance derived-class

好的,所以我有一个像这样的多态类层次结构:

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()之外的任何内容; ?因为它似乎不应该 但我发誓早些时候做过!

谢谢!

2 个答案:

答案 0 :(得分:2)

调用虚方法会在所指向的对象中调用方法的派生版本。如果bPointer->show()指向DeriveA_obj.show(),则bPointer会致电DeriveA_obj,如果DeriveB_obj.show()指向bPointer,则会致电DeriveB_obj。如果您的DeriveC类派生自DeriveBbPointer指向DeriveC个对象,则调用bPointer->show()会调用DeriveC_obj.show() if {{ 1}}在show()中被覆盖。

答案 1 :(得分:1)

  

我有一个指针类型Base Base *bPointer,指向对象类型DeriveBbPointer->show();会致电DeriveA_obj.show()DeriveB_obj.show()吗?

不,绝对没有。如果bPointer的动态类型为DeriveB,则只会调用相应的DeriveB::show函数。反之,如果动态类型为DeriveA,则会调用DeriveA::show

  

如果我的指针DeriveA *dPointer指向对象类型DeriveAdPointer->show();会调用DeriveA_obj.show();以外的任何内容吗?

同样,你必须看一下动态类型。动态类型为DeriveA,表示将调用DeriveA::show