0

所以我在 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() 函数起作用,因为我是虚拟的,但它不会。

有什么方法可以让它工作吗?

4

3 回答 3

7

那不是同一个函数,派生类中的函数带有一个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;}
};
于 2012-05-28T07:46:07.747 回答
0

重载时需要具有相同的参数。您的编译器将 doStuff(int a)、doStuff(String a) 和 doStuff() 视为不同的函数。确保重载时它们都具有相同的参数。

于 2012-05-28T07:57:00.067 回答
0

重载不能跨越类边界。这是您可以使用 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;}
};
于 2012-05-28T07:59:29.160 回答