簡體   English   中英

基類和繼承類之間的C ++函數重載

[英]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::funcB可見,請編寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM