如何重载对一个类的两个实例变量求和的赋值运算符?

时间:2017-09-01 07:06:08

标签: c++ class operator-overloading

问题的详细讨论见this link。我试图总结在类Point中定义的两个实例变量,并将其分配给另一个变量temp

class Point{
    public:
      double x;  
      double y;       
      friend istream& operator>>(istream& input, Point& p);
      double operator=(Point& p);      
      double getSqX(void);      
      double getSqY(void);
      double LengthSquared(void);  


    };    
      double Point::getSqX(void){
          return pow(x,2);}

      double Point::getSqY(void){
          return pow(y,2);}

       double Point::LengthSquared(){ return getSqX() + getSqY(); }


    istream& operator>>(istream& input, Point& p){
     ... // over load the >> operator      
      return input;
    };


     int main(){
        double temp;        
        vector<vector<Point> > FFTfile= some function that loads data();        
        for (int i = 0; i < FFTfile.size(); i++){
            for (int j = 0; j < FFTfile[i].size(); j++){
                 temp=FFTfile[j].LengthSquared();            
            }           

        }       
        return(0);
}

编辑:
基于这些建议,我创建了一个方法LengthSquared(),但我仍然得到以下错误:

 error: 'class std::vector<Point>' has no member named 'LengthSquared'  temp=FFTfile[j].LengthSquared();

2 个答案:

答案 0 :(得分:1)

你永远不应该以这种方式重载赋值运算符。读取代码的人会感到困惑,因为赋值通常意味着..赋值给对象。

相反,创建一个像这样的方法

ssh

答案 1 :(得分:0)

赋值运算符应具有以下接口:

tmp <- setNames(vector("list", length(varibles)), varibles)
for(i in seq_along(varibles)){ 
     tmp[[i]] <- database %>% 
                    filter(get(varibles[i], envir = as.environment(.))==1)
 }

tmp
#$Con1
#  ID Con1 Con2
#1  1    1    1
#2  2    1    0
#3  4    1    0
#4  8    1    0
#5 10    1    0

#$Con2
#  ID Con1 Con2
#1  1    1    1

Point& operator=(const Point& other);

允许分配其他类型。

您正在滥用分配运算符。使用常规方法。