C++/Eclipse cdt,避免实现相同的功能,但具有不同的签名
问题描述:
我不知道我要问什么取决于我正在使用的工具还是来自语言本身,但无论如何。C++/Eclipse cdt,避免实现相同的功能,但具有不同的签名
我有一种情况,我有不同的签名多次声明“一种方法”。如:
class my_class {
public:
int getData();
int getData() const;
my_class operator+(my_class&,my_class&);
my_class operator+(const my_class&, const my_class&) const;
//other operators, other functions etc with similar feature
private:
int data;
};
正如你所想象的那样,实现总是相同的,这只是签名的问题。有没有办法避免写两次这样的功能相同的实现?
在开始时,我认为从类型转换为const类型已经执行,但显然我错了。
谢谢
答
你重载未正确申报。类成员二元运算符只能使用一个参数,另一个则隐式地为
this
。否则,你不能用中缀表示法来使用它。您不需要两个重载。运算符不应该改变操作数,所以const版本就足够了。
所以这给我们留下了:
class my_class {
public:
int getData();
int getData() const;
my_class operator+(const my_class&) const;
//other operators, other functions etc with similar feature
private:
int data;
};
或者非会员版:
class my_class {
public:
int getData();
int getData() const;
friend my_class operator+(const my_class&, const my_class&);
//other operators, other functions etc with similar feature
private:
int data;
};
my_class operator+(const my_class&, const my_class&) {
// code
}
至于getData()
。它会回复您的数据副本,并且我认为它不会修改该实例。那么const
超负荷也就够了。
我对这个错误表示歉意。 – user8469759
@ user8469759,无需道歉。我的回答对你有帮助吗?那么请考虑接受它。 – StoryTeller
我正在为运算符+编写一些代码,那么“getData”呢? – user8469759