ostream& operator<<(ostream& c,complex& a){ char *str; str = (a.imag<0)?"":"+"; c <<a.real<<str<<a.imag<<"i"<<endl; return c; }
时间: 2024-02-29 12:55:50 浏览: 67
这是一个C++的重载运算符<<的实现,用于输出复数类型complex的对象。参数c是输出流对象,a是complex类型的对象。
在实现中,首先定义了一个字符指针str,用于表示a对象的虚部的符号。如果虚部小于0,则str为"";否则,str为"+"。然后,使用c流输出a对象的实部和虚部,并在其中插入str指向的符号。最后,返回输出流对象c。
需要注意的是,这里的a参数没有使用const修饰,因此在函数体内可以修改a对象的状态。如果不希望修改a对象的状态,应该将a参数声明为const complex&类型。
相关问题
ostream& operator<<(ostream& output,Complex& a){ output<<a.real<<"+"<<a.imag<<"i"<<endl; return output; }
这是一个重载了 << 运算符的函数,用于将 Complex 类型的对象以特定格式输出到流中。其中 ostream& 代表返回值为输出流的引用,Complex& a 代表传入的 Complex 类型的引用参数。该函数将实部和虚部输出到流中,并在虚部后添加了一个小写字母 i 表示虚数单位。最后返回输出流的引用。
#include<iostream> using namespace std; class Complex { double real,imag; public: Complex(double r=0,double i=0):real(r),imag(i) {} //只是让代码看起来简短而已 double get_real() {return real;} double get_imag() {return imag;} void print_complex() {cout<<real<<"+"<<"j"<<imag<<endl;} Complex operator + (double a); Complex operator + (Complex x); friend ostream &operator << (ostream &out,Complex &A ); } ostream &operator << (ostream &out,Complex &A ) { out<<A.real<<"+"<<A.imag<<"j"; return out; } Complex Complex:: operator + (double a) { Complex m; m.real=real+a;//实数 m.imag=imag; return m; } Complex Complex::operator +(Complex x)//加不加都可以,引用调用 { Complex t; t.imag=imag+x.imag; t.real=real+x.real; return t; } int main() { Complex c1(1,2),c2(4,5),c3; c1=c1+4.2; //重载 复数类+整型 cout<<c1<<endl; cout<<c2<<endl; c3=c1+c2; //重载 复述类+复数类 cout<<c3<<endl; return 0; } 哪里有问题以及怎么解决
这段代码中有两个问题:
1. 在重载<<运算符时,应该将Complex对象作为常量引用传递,即:
```
friend ostream &operator << (ostream &out, const Complex &A );
```
2. 在Complex类的构造函数中,应该使用成员初始化列表来初始化real和imag成员变量,即:
```
Complex(double r=0, double i=0): real(r), imag(i) {}
```
修改后的代码如下:
```
#include<iostream>
using namespace std;
class Complex {
double real, imag;
public:
Complex(double r=0, double i=0): real(r), imag(i) {}
double get_real() {return real;}
double get_imag() {return imag;}
void print_complex() {cout<<real<<"+"<<"j"<<imag<<endl;}
Complex operator + (double a);
Complex operator + (Complex x);
friend ostream &operator << (ostream &out, const Complex &A );
};
ostream &operator << (ostream &out, const Complex &A ) {
out<<A.real<<"+"<<A.imag<<"j";
return out;
}
Complex Complex:: operator + (double a) {
Complex m;
m.real=real+a; //实数
m.imag=imag;
return m;
}
Complex Complex::operator +(Complex x) {
Complex t;
t.imag=imag+x.imag;
t.real=real+x.real;
return t;
}
int main() {
Complex c1(1,2),c2(4,5),c3;
c1=c1+4.2; //重载 复数类+整型
cout<<c1<<endl;
cout<<c2<<endl;
c3=c1+c2; //重载 复数类+复数类
cout<<c3<<endl;
return 0;
}
```
阅读全文