2016-11-07 107 views
0

我不知道我要问什么取决于我正在使用的工具还是来自语言本身,但无论如何。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类型已经执行,但显然我错了。

谢谢

回答

1
  1. 你重载未正确申报。类成员二元运算符只能使用一个参数,另一个则隐式地为this。否则,你不能用中缀表示法来使用它。

  2. 您不需要两个重载。运算符不应该改变操作数,所以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超负荷也就够了。

+0

我对这个错误表示歉意。 – user8469759

+0

@ user8469759,无需道歉。我的回答对你有帮助吗?那么请考虑接受它。 – StoryTeller

+0

我正在为运算符+编写一些代码,那么“getData”呢? – user8469759

相关问题