C++,打印输出 (<<) 运算符重载

标签 c++ operator-overloading

我是 C++ 的初学者,我正在尝试制作一个使用 2 个点的程序,并将它们加到一条线上。然后加上一条线和一个点,得到一个多边形。

我正在尝试使 operator << 重载,但未成功这样我就可以打印出我的行:

#include <iostream>
using namespace std;

class Line {
private: 
    OnePoint onevalue; 
    OnePoint twovalue; 
public: 
    Line(OnePoint a, OnePoint b) {
        onevalue = a; 
        twovalue = b; 
    }

ostream& operator<<(ostream& print, Line& linje){ // Error right here. 
    print << linje.onevalue << ',' << linje.twovalue; // Too many 
    return print; // parameters for this type of function
}    
};

class OnePoint {
private: 
    double xvalue; 
    double yvalue; 
public:
    OnePoint(double x = 0.0, double y = 0.0) {
    xvalue = x;
    yvalue = y;
}

friend ostream& operator<<(ostream& printh, OnePoint& cPoint) {
     printh << "(" << cPoint.xvalue << ',' << cPoint.yvalue << ")";
     return printh;
}

void Plus(OnePoint a) {
    xvalue = xvalue + a.xvalue; 
    yvalue = yvalue + a.yvalue; 
}

void Minus(OnePoint b) {     
    xvalue = xvalue + b.xvalue;
    yvalue = yvalue + b.yvalue;
}

OnePoint Plustwo(OnePoint a) {
     return (xvalue + a.xvalue, yvalue - a.yvalue); 
}

void Change(double a, double b) {
      xvalue += a;
      yvalue += b; 
}

void Print(OnePoint b) {
      cout << xvalue << "," << yvalue << endl; 
}

OnePoint operator+(OnePoint a) {
       OnePoint temp; 
       temp.xvalue = xvalue + a.xvalue; 
       temp.yvalue = yvalue + a.yvalue; 
       return temp; 
}        
};

//--------------------------------------------------------------------        
int main(){  
    OnePoint a(3.0, 3.0); 
    OnePoint b(1.0, 1.0);  
    OnePoint d(1.0, 4.0);
    OnePoint c; 

    c = a + b + d;         
    c.Print(c);        
}

编辑:

我现在可以cout我的OnePoint , 但我不能 cout Line .

最佳答案

作为成员函数,运算符为 this 指针获取一个额外的隐藏参数。

您可以通过将其声明为类的友元 使其成为自由函数:

class Line {
  // other members
public: 

  friend ostream& operator<<(ostream& print, Line& linje){
    print << linje.onevalue << ',' << linje.twovalue; 
    return print;             
  }

};

关于C++,打印输出 (<<) 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32762750/

相关文章:

c# - 需要重载 operator< 和 null 检查

c++ - 二传手的引用返回

c# - 关于运算符重载决议

c++ - 如何为内部类声明运算符<<

c++ - 在 TFS 测试阶段运行 C++ 单元测试

c++ - C++ 中的运算符重载

java - Java编译器如何实现二元运算符

c++ - 为什么会出现此编译器错误?

c++ - Windows 上带通配符的目录中的文件

c++ - 在 C++ Builder XE4 中搜索内存泄漏