2014-01-12 51 views
0

行,所以我有一个多态类层次结构设置这样的:调用与多个派生类基类的成员函数

class Base 
{ 
    virtual void show(); 
}; 

class DeriveA : Base 
{ 
    void show(); 
}; 

class DeriveB : Base 
{ 
    void show(); 
}; 

DeriveA DeriveA_obj; 
DeriveB DeriveB_obj; 

和指针型基

Base *bPointer 

指向的对象类型DeriveB会

bPointer->show(); 

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

如果我有一个指针类型DeriveA

DeriveA *dPointer 

指向的对象类型DeriveA比DeriveA_obj.show会

dPointer->show(); 

调用任何其它(); ?因为它似乎不应该
但我发誓它做得更早!

谢谢!

回答

2

调用虚拟方法会调用所指向的对象中方法的派生最多版本。 bPointer->show()将呼叫DeriveA_obj.show()如果bPointer指向DeriveA_obj,并且如果bPointer指向DeriveB_obj将呼叫DeriveB_obj.show()。如果您有DeriveC类别从DeriveBbPointer派生出指向DeriveC对象,则如果在DeriveC中覆盖show(),则调用bPointer->show()将调用DeriveC_obj.show()

1

我有一个指针类型基地Base *bPointer指向一个对象类型DeriveBbPointer->show();电话DeriveA_obj.show()DeriveB_obj.show()

不,绝对不是。如果bPointer的动态类型为DeriveB,则只执行对相应的DeriveB::show函数的调用。 Viceversa,如果动态类型是DeriveA,它会调用DeriveA::show

如果我有一个指针DeriveA *dPointer指向的对象类型DeriveAdPointer->show();调用比DeriveA_obj.show();其他什么吗?

再一次,你必须看看动态类型。动态类型是DeriveA,这意味着将调用DeriveA::show

相关问题