这是我写的C++程序,关于运算符重载的程序,把 + 重载成复数的 +,为什么编译后有问题,无法通过,谢谢了

2025-01-07 04:40:35
推荐回答(5个)
回答1:

#include
using namespace std;

class Complex
{
private :
float real;
float image;
public :
Complex(float i=0,float j=0); //构造函数
Complex operator +(Complex temp_1); // +重载成 成员函数
friend void print(const Complex & temp); //打印复数的友员函数
};

//构造函数,在类外定义
Complex ::Complex(float i,float j)
{
real=i;
image=j;
}

// +重载成 成员函数
Complex Complex ::operator +(Complex temp_1)
{
Complex temp_2;
temp_2.real=this->real+temp_1.real;
temp_2.image=this->image+temp_1.image;
return temp_2;
}

//友员函数
void print( const Complex & temp)
{
if(temp.image<=0)
cout< else
cout< cout<<'\n';
}

int main()
{
Complex compx_1(1.0,2.0);
Complex compx_2(3.0,4.0);
print(compx_1 + compx_2);
return 0;
}

回答2:

你在重载+号的时候,里面的参数只有一个Complex operator +(Complex temp_1);
但是你在main中调用的时候,确调用了两个参数的print(compx_1 + compx_2);
所以编译错误,应该要把重载+号写成有两个参数的

回答3:

1、首先,你没有默认构造函数Complex temp_2;会出错
2、你的两个成员变量是私有的,不能直接访问,所以,直接访问的都是错的
建议改为公有,或者增加返回函数
float get***() {return ***;}

回答4:

一般把二元运算符重载成友元函数,一元函数重载成类的成员函数。这里你这样重载怎么能使用compx_1+compx_2呢,重载成友元才行,想你的输出函数一样

回答5:

q7382168 第一点是对的,但第二点是错的。
你把报的错发出来给大家看看吧
我有一个完整的complex类。可以发给你看看