c++ 运算符重载的题目

定义一个复数类,通过重载运算符:“*、/”,直接实现二个复数之间的乘除运算。
编写一个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。
要测试过的没错误的,帮我把错误改掉,行吗?

#include<iostream.h>
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
friend Complex operator*(Complex &c1,Complex &c2);
Complex operator/(Complex &c);
//重载了输出操作符以方便输出
friend ostream& operator<<(ostream &output,Complex &c);
private:
double real;
double imag;
};

Complex operator*(Complex &c1,Complex &c2)
{
double newReal,newImag;
newReal=c1.real*c2.real-c1.imag*c2.imag;
newImag=c1.real*c2.imag+c1.imag*c2.real;
return Complex(newReal,newImag);
}

Complex Complex::operator/(Complex &c)
{
double newReal,newImag,demo;
demo=c.real*c.real+c.imag*c.imag;
if(demo!=0)
{
newReal=(real*c.real+imag*c.imag)/demo;
newImag=(imag*c.real-real*c.imag)/demo;
return Complex(newReal,newImag);
}
}
ostream& operator<<(ostream &output,Complex &c)
{
output<<"("<<c.real;
if(c.imag>=0)
output<<"+";
output<<c.imag<<"i)"<<endl;
return output;
}

void main()
{
Complex c1(2,-1),c2(1,1),c3,c4;
c3=c1*c2;
c4=c1/c2;
cout<<"复数的积:"<<c3<<endl;
cout<<"复数的商:"<<c4<<endl;
}
报什么错误,我的编译器(VC++6)上没问题啊?
我亲自运行过。
温馨提示:内容为网友见解,仅供参考
无其他回答

c++关于运算符重载的问题
2 char &charArray::operator[](int i)\/\/&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。后者只是一个char型的值而已

C++关于运算符重载的一道题
选C.看题目:-- 若在表达式“y\/x”(y在前面),"\/"是作为成员函数重载(成员函数)的运算符 调用y的成员函数operator\/, 也就是 y.operator\/(x)

关于c++中运算符重载的题 谢谢 有一个double的数和一个复数相加 分两种...
Complex(double r){real=r;imag=0;}\/\/转换构造函数 friend Complex operator +(Complex &c1,Complex &c2);\/\/运算符重载 private:double real;double imag;};Complex operator +(Complex &c1,Complex &c2){ return Complex(c1+c2);} void Complex::write (){ cout<<"请输入实部和虚部"<<...

C++重载运算符问题
另外一个问题就是,有的编译器会优化。上面的那个函数,即使改成先创建一个对象,然后再返回这个对象,如果是在dev-c++里,dev-c++就会做优化,不会调用复制构造函数。

C++重载问题
把 “int main()”改成int main()”即可。原来的括号是中文输入状态下的,系统会报错。

下面c++有什么问题(运算符重载出了问题)
b,int c):hour(a),minute(b),second(c){} void print(){printf("%d,%d,%d",hour,minute,second);} friend time operator+(time&aa,time&bb);};time operator+(time &aa,time &bb){return time(aa.hour+bb.hour,aa.minute+bb.minute,aa.second+bb.second);} 是print函数的问题 ...

2020年计算机二级C++考试每日一练(6月17日)
D)可以通过运算符重载来创建c++中原来没有的运算符 答案:C (2)有如下程序:nclude using namespace std;int main(){ void function(double val);double val;function(val);cout<<val; p=""><\/val;> return 0;} void function(double val)} val=3;} 编译运行这个程序将出现的情况是( )...

关于运算符重载,下列表述中正确的是( )。
【答案】:C 重载运算符的规则如下:①c++不允许用户自已定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型...

C++:运算符重载3(单目:日期自增)
class Date{ public:int year;int month;int day;Date(int x, int y, int z){ year = x;month = y;day = z;} ~Date(){ } };class DateTime:public Date { public:int h;int min;int s;DateTime(int x, int y, int z, int o, int p, int q) :Date(x,y,z){ h = o...

重载的运算符,调用形式C++
若是重载为成员函数,D) a.operator++()与之对应,后置++的等效形式为a.operator++(0)若是重载为友元函数,B) operator++(a)与之对应,后置++的等效形式为operator++(a, 0)

相似回答