[英]C++ function overloading between base class and inherited class
考慮下面的例子。 我猜想,因為func
是虛擬的,所以根據實例類型(類型B)和參數類型(short或int)決定在運行時調用哪個實現
但是,在運行此代碼后,我得到了意想不到的結果,其中指針類型只確定要跳轉的函數,這完全打破了我的多態性基本假設......
這導致了一個問題,我可以將2 func實現與函數重載相關聯?
誰能告訴我這個結果是什么原因造成的? 謝謝
class A {
public:
virtual void func(short x) { printf("A::func %d\n", x); }
};
class B : public A {
public:
virtual void func(int x) { printf("B::func %d\n", x); }
};
int main(void)
{
int n=2;
short m=3;
A* a = new B;
a->func(n);
a->func(m);
B* bp = new B;
bp->func(n);
bp->func(m);
}
//output is :
//A::func 2
//A::func 3
//B::func 2
//B::func 3
如果派生類具有與基類中的名稱相同的函數,則隱藏基類函數。 如果您希望A::func
在B
可見,請編寫using聲明:
class B : public A {
public:
using A::func; //here
virtual void func(int x) { printf("B::func %d\n", x); }
};
現在的輸出是:
A::func 2
A::func 3
B::func 2
A::func 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.