2014-09-30 100 views
-1

我不知道如何把一个正确的标题。对不起,我的问题对我来说很难。派生的方法在基类不叫

我有一个类myCal.h:

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)时,ret urn值仍然是2,我希望它返回101.

请帮我做到这一点,但不要改变mockCal :: expresstion中的任何内容。 非常感谢。

+0

如果你写的:INT expresstion(INT一个, int b,int c) { return myCal :: expresstion(a,b,c); }你将永远有2 – 2014-09-30 08:28:47

+0

所以我现在需要做的,在myCal :: expresstion中调用myCal :: add和myCal :: sub,我希望myCal :: sub总是返回100,请帮助 – 2014-09-30 08:33:17

+0

写在表达式中mockCal类如果关于你的实例对象,那么如果实例是myCal(高级),你将调用myCal :: expresstion,否则你会调用mockCal override – 2014-09-30 08:46:38

回答

1

你需要做的方法int sub(int a, int b)在基类的虚(在你的代码myCal类),如果你想覆盖它在mockcal

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

我无法编辑class myCal,只能修改mockCal,可以给我建议...... :( – 2014-09-30 08:39:00

+1

在_mokcal中执行计算:: expresstion_,不返回_myCal :: expresstion(a,b,c)_。 – Zlatomir 2014-09-30 08:45:46

+0

我知道,但我必须这样做,我不能从myCal :: expresstion复制代码,但如果您有任何想法,请发布它,有任何方法来调用expresstion方法和此方法cal mockcal :: sub而不是myCal :: sub ... :( – 2014-09-30 08:51:04