是否可以将重载提取运算符与重载算术运算符级联? 我试图在C++中实现一个类复合体,并重载算术运算符以及'''运算符的输入/输出。单独或级联时,算术运算符的工作方式与预期相同,但在尝试执行以下语句时,我无法获得正确的结果: cout << "something" << complex1 + complex2 << "\n";
其中complex1和complex2是COMPLEX类的对象 类定义的片段:是否可以将重载提取运算符与重载算术运算符级联? 我试图在C++中实现一个类复合体,并重载算术运算符以及'''运算符的输入/输出。单独或级联时,算术运算符的工作方式与预期相同,但在尝试执行以下语句时,我无法获得正确的结果: cout << "something" << complex1 + complex2 << "\n";,c++,overloading,operator-keyword,insertion,C++,Overloading,Operator Keyword,Insertion,其中complex1和complex2是COMPLEX类的对象 类定义的片段: class COMPLEX{ int a; // Real part int b; // Imaginary part public: COMPLEX operator = (COMPLEX ); COMPLEX operator + (COMPLEX ) const; friend istream& operator >> (istream
class COMPLEX{
int a; // Real part
int b; // Imaginary part
public:
COMPLEX operator = (COMPLEX );
COMPLEX operator + (COMPLEX ) const;
friend istream& operator >> (istream &, COMPLEX &);
friend ostream& operator << (ostream &, COMPLEX &);
-snip-
}
COMPLEX COMPLEX::operator = (COMPLEX t_c) {
return COMPLEX(a = t_c.a, b = t_c.b);
}
COMPLEX COMPLEX::operator + (COMPLEX t_c) const{
return COMPLEX(a + t_c.a, b + t_c.b);
}
istream& operator >> (istream &i_s, COMPLEX &t_c){
i_s >> t_c.a >> t_c.b;
return i_s;
}
ostream& operator << (ostream &o_s, COMPLEX &t_c){
o_s << t_c.a << "+" << t_c.b << "i";
return o_s;
}
除此之外,我还重载了操作符
当我试图级联重写你的
cout
语句时
cout << "something" << (complex1 + complex2) << "\n";
cout您的操作符问题是您的流插入操作符被定义为
friend ostream& operator << (ostream &, COMPLEX &);
a+b
的值是右值,而不是左值,因为它是函数运算符+
返回的值。在C++中,不能将引用绑定到rValf,因为这样您可以做这样的坏事:
COMPLEX& c = a + b; // This step isn't legal
c = 137; // Wait, what object did we just change?
这里的问题是,如果我们可以将引用c
绑定到a+b
返回的临时对象,那么我们可以使用该引用对该对象进行更改。但是这没有任何意义-a+b
是表达式的值,而不是实际对象
这和这里发生的问题是一样的。您的操作员您的问题是该操作员!我以前试过,它确实有效。但我想知道我们是否可以执行像cout-Oops这样的操作!我试过你的方法。。仍然不起作用。结果是像以前一样将类型转换为int。我能做到这一点的唯一方法是将结果分配给第三个复杂类型的对象,然后完成它。非常感谢:)这正是我想要的解释
cout << a + b << endl;
COMPLEX& c = a + b; // This step isn't legal
c = 137; // Wait, what object did we just change?
friend ostream& operator<< (ostream& out, const COMPLEX& c);