我不知道我要问的是否取决于我使用或使用语言本身的工具,但无论如何。
我有一种情况,我有一种方法"用不同的签名多次声明。如:
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类型的转换会被执行,但显然我错了。
谢谢
答案 0 :(得分:1)
您的重载未正确声明。类成员二元运算符只能使用一个参数,另一个是隐式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
重载也足够了。