[英]C++ inheritance and overloading, calling a base method once overloaded
目前,我有一个包含另一个类的类,该类为其某些方法提供包装,并完整提供其他类:
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个方法calculate1
和calculate2
,它们均采用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 ++有点陌生,但我希望我能理解这些信息。
要调用基类方法,请使用限定符:
return foo::calculate1(a, b);
如果要多态调用基类方法,请记住确保它们是virtual
。
通过这种方式可能:
class bar : public foo {
public:
int calculate2(int a, int b) {
return foo::calculate2(a+1, b+1);
}
};
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是Vehicle一样)
b)bar 有一个 foo(如Car中有一个Engine)
如果一个更有意义,继承,否则构成。 如果它们都没有意义,那么您可能应该给设计再喝一杯咖啡。
在这里找到更多原因
像textbox
一样,把foo
看作是一个类widget
,把bar
当作一个专门的小部件。 让calculate
成为renderer
(一个在屏幕上绘制文本框的函数),对bar
参数进行特殊处理,然后在foo
调用标准渲染器。 在这种情况下,可以说bar
是 foo
。 另一方面,让bar
是一个约束求解器,它接受参数,进行一些计算,然后将其传递给标准la engine foo
进行最终计算,那么我想说bar
有一个线性代数引擎foo
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.