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

Calling base class member functions with multiple derived classes

本文关键字:调用 基类 成员 函数 派生      更新时间:2023-10-16

好的,所以我有一个多态类层次结构,如下所示:

class Base 
{
     virtual void show();
};
class DeriveA : Base 
{
     void show();
};
class DeriveB : Base
{
     void show();
};
DeriveA DeriveA_obj;
DeriveB DeriveB_obj;

和指针类型 Base

Base *bPointer

指向派生B将

bPointer->show();

调用 DeriveA_obj.show() 和 DeriveB_obj.show()?

如果我有一个指针类型 派生A

DeriveA *dPointer

指向 DeriveA 将

dPointer->show();

调用除 DeriveA_obj.show(); 以外的任何内容?因为似乎不应该
但我发誓它更早!

谢谢!

调用虚拟方法将调用所指向对象中该方法的最派生版本。 如果bPointer点在DeriveA_obj点,bPointer->show()会调用DeriveA_obj.show(),如果bPointer点在DeriveB_obj点,则会调用DeriveB_obj.show()。 如果您有一个从 DeriveB 派生的 DeriveC 类,并且bPointer指向一个DeriveC对象,那么如果show()DeriveC 中被覆盖,则调用 bPointer->show() 将调用DeriveC_obj.show()

我有一个指针类型 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