想要直接输出复数的四则运算,直接输出复数没有问题。
1.重载输出函数
ostream &operator<<(ostream &out, Plural &p)
{
out<<"{"<<p.real;
if(p.image>0)
out<<"+";
out<<p.image<<"i"<<"}";
return out;
}
2.重载加法运算
Plural operator+(Plural a,Plural b)
{
Plural c;
c.real=a.real+b.real;
c.image=a.image+b.image;
return c;
}
3.主函数
int main()
{
Plural a,b;
cin>>a;
cin>>b;
cout<<a<<endl;
cout<<b<<endl;
cout<<(a+b)<<endl;
// cout<<a-b<<endl;
// cout<<a*b<<endl;
// cout<<a/b<<endl;
return 0;
}
总的代码
#include<iostream>
using namespace std;
class Plural{
public:
int real,image;
Plural(int a1,int b1)
{
a1=real;
b1=image;
}
Plural()
{
}
friend ostream &operator<<(ostream &out,Plural &p);
friend istream &operator>>(istream &in,Plural &p);
friend Plural operator-(Plural a,Plural b);
friend Plural operator+(Plural a,Plural b);
friend Plural operator*(Plural a,Plural b);
friend Plural operator/(Plural a,Plural b);
};
ostream &operator<<(ostream &out, Plural &p)
{
out<<"{"<<p.real;
if(p.image>0)
out<<"+";
out<<p.image<<"i"<<"}";
return out;
}
istream &operator>>(istream &in,Plural &p)
{
in>>p.real;
in>>p.image;
return in;
}
Plural operator-(Plural a,Plural b)
{
Plural c;
c.real=a.real-b.real;
c.image=a.image-b.image;
return c;
}
Plural operator+(Plural a,Plural b)
{
Plural c;
c.real=a.real+b.real;
c.image=a.image+b.image;
return c;
}
Plural operator*(Plural a,Plural b)
{
Plural c;
c.real=a.real*b.real-a.image*b.image;
c.image=a.real*b.image+a.image*b.real;
return c;
}
Plural operator/(Plural a,Plural b)
{
int d;
d=b.real*b.real-b.image*b.image;
Plural c;
c.real= (a.real*b.real-a.image*b.image)/d;
c.image=(a.real*b.image+a.image*b.real)/d;
}
int main()
{
Plural a,b;
cin>>a;
cin>>b;
cout<<a<<endl;
cout<<b<<endl;
// cout<<(a+b)<<endl;
// cout<<a-b<<endl;
// cout<<a*b<<endl;
// cout<<a/b<<endl;
return 0;
}
怎么样通过重载运算符来输出两个复数的和,不能添加第三个变量。
因为你在友元函数内试图返回函数内创建的临时变量
c在函数返回后就会被销毁,你返回到外部的值没有意义
改为动态新建
并返回即可
此外你似乎没有考虑到除法会出现分数,如果用int去作为复数的成员,在计算除法时可能出错.
我只简单修改了加法和减法的部分,剩余两种运算同理
示例代码如下有帮助望采纳~
#include <iostream>
using namespace std;
class Plural
{
public:
int real, image;
Plural(int a1, int b1)
{
a1 = real;
b1 = image;
}
Plural()
{
}
friend ostream &operator<<(ostream &out, Plural &p);
friend istream &operator>>(istream &in, Plural &p);
friend Plural &operator-(Plural a, Plural b);
friend Plural &operator+(Plural a, Plural b);
};
ostream &operator<<(ostream &out, Plural &p)
{
out << "{" << p.real;
if (p.image > 0)
out << "+";
out << p.image << "i"
<< "}";
return out;
}
istream &operator>>(istream &in, Plural &p)
{
in >> p.real;
in >> p.image;
return in;
}
Plural &operator-(Plural a, Plural b)
{
Plural *c = new Plural;
c->real = a.real - b.real;
c->image = a.image - b.image;
return *c;
}
Plural &operator+(Plural a, Plural b)
{
Plural *c = new Plural;
c->real = a.real + b.real;
c->image = a.image + b.image;
return *c;
}
int main()
{
Plural a, b;
cin >> a;
cin >> b;
cout << a << endl;
cout << b << endl;
cout << (a + b) << endl;
cout << a - b << endl;
return 0;
}