在继承c ++中重载

Jja*_*ang 0 c++ inheritance overloading

所以我在尝试在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;}

};
Run Code Online (Sandbox Code Playgroud)

然后我做:

Data *D=new A();
D->f(4);
Run Code Online (Sandbox Code Playgroud)

我希望Data的f()函数可以做到A类的f()函数,因为我是虚拟的,但事实并非如此.

有什么方法可以使它工作?

Luc*_*ore 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;}
};
Run Code Online (Sandbox Code Playgroud)