簡體   English   中英

繼承中的重載c ++

[英]overloading in inheritance c++

所以在嘗試重載c ++時遇到了這個問題:我有那些類:

class Data
{
public:
    void virtual f(){cout<<"In data!"<<endl;}
};

class A: public Data
{
public:
    void f(int x){cout<<"Class A int is: "<<x<<endl;}

};

然后我做:

Data *D=new A();
D->f(4);

我希望Data的f()函數能夠對A類的f()函數起作用,因為它是虛擬的,但事實並非如此。

有什么辦法可以使它起作用?

那是不一樣的函數,派生類中的函數帶有一個int參數。

甚至不應該編譯,因為Data沒有名為f(int)

為了使多態性起作用,您需要相同的簽名:

class Data
{
public:
    void virtual f(int){cout<<"In data!"<<endl;}
    //              |
    //        dummy parameter
};

class A: public Data
{
public:
    void f(int x){cout<<"Class A int is: "<<x<<endl;}
};

重載時需要具有相同的參數。 您的編譯器將doStuff(int a),doStuff(String a)和doStuff()視為不同的函數。 重載時,請確保它們都具有相同的參數。

重載無法跨越類邊界。 您可以執行以下操作以使用A類的對象來調用兩者-

class Data
{
public:
    void virtual f(){cout<<"In data!"<<endl;}
    //              |
    //        dummy parameter
};

class A: public Data
{
    using Data::f;

public:
    void f(int x){cout<<"Class A int is: "<<x<<endl;}
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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