中的派生方法未在基类中调用

Derived method in not called in base class

本文关键字:基类 调用 方法 派生      更新时间:2023-10-16

我不知道如何放置正确的标题。对不起,我的问题很难解决。

我有一节课

class myCal
{
public:
    myCal();
    int add(int a, int b);
    int sub(int a, int b);
    int expresstion(int a, int b, int c);
};

和myCal.cpp:

myCal::myCal()
{
}
int myCal::add(int a, int b)
{
    return a+b;
}
int myCal::sub(int a, int b)
{
    return a-b;
}
int myCal::expresstion(int a, int b, int c)
{
    return add(sub(a, b), c);
}

在main.cpp中,我有这样的类mockcal:

class mockcal : public myCal
{
public:
    int sub(int a, int b)
    {
        return 100;
    }
    int expresstion(int a, int b, int c)
    {
       return myCal::expresstion(a,b,c);
    }
};

如果我运行myCal.expresstion(3,2,1),返回值是2,没关系,但是当我运行mockCal.expresstion(3,2,1)时,返回值仍然是2,我希望它返回101。

请帮我做这件事,但不要更改mockCal::expression中的任何内容。非常感谢。

如果要在mockcal类中重写方法int sub(int a, int b),则需要在基类(代码中的myCal类)中使其成为虚拟方法

class myCal
{
   public:
   //...
   virtual int sub(int a, int b);
   //..
};