C ++继承和重载,一旦重载就调用一个基本方法

时间:2014-08-13 09:10:38

标签: c++ inheritance overloading

目前我有一个包含另一个类的类,并为其某些方法提供了一个包装器,并提供了其他方法:

class bar {
public:

    int calculate1(int a, int b) {
        return f.calculate1(a, b);
    }

    int calculate2(int a, int b) {
        a ++;
        b ++;
        return f.calculate2(a, b);
    }

private:
    foo f
}

foo是一个包含2个方法calculate1calculate2的类,其中2个int并返回int

有没有更好的方法来实现继承?能够摆脱这个很好:

    int calculate1(int a, int b) {
        return f.calculate1(a, b);
    }

但是这需要调用它正在重载的函数,我不知道该怎么做:

    int calculate2(int a, int b) {
        a ++;
        b ++;
        return f.calculate2(a, b);
    }

甚至是可能的还是可取的?在这种情况下是否有其他方法可供使用?

如果我的一些代码有点狡猾,我很抱歉,因为你可以告诉我对C ++有点新意,但我希望我能得到消息。

3 个答案:

答案 0 :(得分:3)

要调用基类方法,请使用限定条件:

return foo::calculate1(a, b);

如果您希望以多态方式调用它们,请务必确保您的基类方法为virtual

答案 1 :(得分:2)

可以通过这种方式:

class bar : public foo {
public:

    int calculate2(int a, int b) {        
        return foo::calculate2(a+1, b+1);
    }
};

答案 2 :(得分:0)

1.有没有更好的方法来实现继承?“

当然!

//sg
#include<iostream>
class foo {
public:
    int calculate1(int a, int b) {
        return a * b;
    }

    int calculate2(int a, int b) {
        a ++;
        b ++;
        return a + b;
    }

};
class bar: public foo {
public:

    int calculate1(int a, int b) {
        return foo::calculate1(a, b);
    }

    int calculate2(int a, int b) {
        a++;
        b++;
        return foo::calculate2(a, b);
    }
};
using namespace std;
int main() {
    bar b;
    cout << b.calculate2(1,2) << endl;
    cout << b.calculate1(1,2) << endl;

    return 0;
}

继承还是撰写? (这里的继承真的更好吗?)

2. Is it even possible or advisable?

我们已经看到它是可能的。至于它是否可取,foo和bar * 的语义将决定。 他们站在,我认为继承看起来很多更好,foo包含基本的计算器,除了做额外的事情之外,bar需要使用它们。当然,这就是我认为发生的事情以及你想要的事情,可能/不正确。 ?在哪种情况下,作文可能会获胜。

作为拇指规则,您可以尝试大声说出以下两行:

a)bar foo(在Car中是车辆)

b)bar foo(如Car中有引擎)

如果 a 更有意义,则继承,否则撰写。如果它们都没有任何意义,那么你应该给你的设计另外一杯咖啡。

查找更多原因here

<小时/> *

foo视为班级widget,将bar视为专门的微件,例如textbox。让calculate成为renderer(在屏幕上绘制文本框的函数),在bar中对参数执行特殊操作,然后在foo中调用标准渲染器。在这种情况下,有必要说bar foo。另一方面,让bar成为一个约束求解器,它接受参数,进行一些计算并将它们传递给标准的la引擎foo进行最终计算,然后我会说{{1} 1}} 有一个线性代数引擎bar