64,642
社区成员
发帖
与我相关
我的任务
分享
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作 者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>
using namespace std;
template <class numtype>
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(numtype r,numtype i){real=r; imag=i;}
friend Complex<numtype> operator+(Complex<numtype>&,Complex<numtype>&);
friend Complex<numtype> operator-(Complex<numtype>&,Complex<numtype>&);
friend Complex<numtype> operator*(Complex<numtype>&,Complex<numtype>&);
friend Complex<numtype> operator/(Complex<numtype>&,Complex<numtype>&);
void display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
private:
numtype real;
numtype imag;
};
//下面定义成员函数
template <class numtype>
Complex<numtype> operator+(Complex<numtype> &c2,Complex<numtype>&t)
{
Complex<numtype> mm;
mm.imag=t.real+c2.real;
mm.real=t.imag+c2.imag;
return mm;
}
template <class numtype>
Complex<numtype> operator-(Complex<numtype> &c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real-t.real,c2.imag-t.imag);
}
template <class numtype>
Complex<numtype> operator*(Complex<numtype> &c2,Complex<numtype> &t)
{
return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
}
template <class numtype>
Complex<numtype> operator/(Complex<numtype> &c2,Complex<numtype> &t)
{
return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
}
//下面定义用于测试的main()函数
int main()
{
Complex<int> c1(3,4),c2(5,-10),c3(0,0);
Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
cout<<"c4=";
c3.display();
cout<<"c5=";
c3.display();
c6=c4+c5;
cout<<"c4+c5=";
c3.display();
c6=c4-c5;
cout<<"c4-c5=";
c3.display();
c6=c4*c5;
cout<<"c4*c5=";
c3.display();
c6=c4/c5;
cout<<"c4/c5=";
c3.display();
return 0;
}
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作 者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>
using namespace std;
template <class numtype>
class Complex
{
public:
Complex()
{
real=0;
imag=0;
}
Complex(numtype r,numtype i)
{
real=r;
imag=i;
}
friend Complex<numtype> operator+(Complex<numtype>&c2,Complex<numtype>&t)
{
Complex<numtype> mm;
mm.imag=t.real+c2.real;
mm.real=t.imag+c2.imag;
return mm;
}
friend Complex<numtype> operator-(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real-real,c2.imag-imag);
}
friend Complex<numtype> operator*(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
}
friend Complex<numtype> operator/(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
}
void display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
private:
numtype real;
numtype imag;
};
//下面定义用于测试的main()函数
int main()
{
Complex<int> c1(3,4),c2(5,-10),c3(0,0);
Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
cout<<"c4=";
c3.display();
cout<<"c5=";
c3.display();
c6=c4+c5;
cout<<"c4+c5=";
c3.display();
c6=c4-c5;
cout<<"c4-c5=";
c3.display();
c6=c4*c5;
cout<<"c4*c5=";
c3.display();
c6=c4/c5;
cout<<"c4/c5=";
c3.display();
return 0;
}
[/quote]
试了一下,这句
return Complex<numtype>(c2.real-real,c2.imag-imag);
改成这样就好了。
return Complex<numtype>(c2.real-t.real,c2.imag-t.imag);
[/quote]最近一直忙的没时间上网,刚看到回复,我按照您的改了改,没有错误和警告了。很谢谢您!Complex<numtype>& operator+(Complex<numtype>&,Complex<numtype>&);
注意返回值那里加了引用。不需要友元。a+b。实际就是可以理解为调用 a.operator+ 这个方法而已。
只有跟输入输出有关的<< 和>>需要使用友元 。因为不是复数对象在调用,而是输出流对象在调用。比如你重载<<
cout<<a那么就是在执行cout.operator<<方法/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作 者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>
using namespace std;
template <class numtype>
class Complex
{
public:
Complex()
{
real=0;
imag=0;
}
Complex(numtype r,numtype i)
{
real=r;
imag=i;
}
friend Complex<numtype> operator+(Complex<numtype>&c2,Complex<numtype>&t)
{
Complex<numtype> mm;
mm.imag=t.real+c2.real;
mm.real=t.imag+c2.imag;
return mm;
}
friend Complex<numtype> operator-(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real-real,c2.imag-imag);
}
friend Complex<numtype> operator*(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
}
friend Complex<numtype> operator/(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
}
void display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
private:
numtype real;
numtype imag;
};
//下面定义用于测试的main()函数
int main()
{
Complex<int> c1(3,4),c2(5,-10),c3(0,0);
Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
cout<<"c4=";
c3.display();
cout<<"c5=";
c3.display();
c6=c4+c5;
cout<<"c4+c5=";
c3.display();
c6=c4-c5;
cout<<"c4-c5=";
c3.display();
c6=c4*c5;
cout<<"c4*c5=";
c3.display();
c6=c4/c5;
cout<<"c4/c5=";
c3.display();
return 0;
}
[/quote]
试了一下,这句
return Complex<numtype>(c2.real-real,c2.imag-imag);
改成这样就好了。
return Complex<numtype>(c2.real-t.real,c2.imag-t.imag);
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 作 者:王颖
* 完成日期:2014 年 4 月 14 日
* 版 本 号:v1.0
* 输入描述: 无
* 问题描述:类的友元函数+复数类中的运算符重载+类模版
* 请用类的成员函数,定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include <iostream>
using namespace std;
template <class numtype>
class Complex
{
public:
Complex()
{
real=0;
imag=0;
}
Complex(numtype r,numtype i)
{
real=r;
imag=i;
}
friend Complex<numtype> operator+(Complex<numtype>&c2,Complex<numtype>&t)
{
Complex<numtype> mm;
mm.imag=t.real+c2.real;
mm.real=t.imag+c2.imag;
return mm;
}
friend Complex<numtype> operator-(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real-real,c2.imag-imag);
}
friend Complex<numtype> operator*(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(t.real*c2.real,t.imag*c2.imag);
}
friend Complex<numtype> operator/(Complex<numtype>&c2,Complex<numtype>&t)
{
return Complex<numtype>(c2.real/t.real,c2.imag/t.imag);
}
void display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
private:
numtype real;
numtype imag;
};
//下面定义用于测试的main()函数
int main()
{
Complex<int> c1(3,4),c2(5,-10),c3(0,0);
Complex<double> c4(2.5,6.6),c5(5.5,9.9),c6;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
cout<<"c4=";
c3.display();
cout<<"c5=";
c3.display();
c6=c4+c5;
cout<<"c4+c5=";
c3.display();
c6=c4-c5;
cout<<"c4-c5=";
c3.display();
c6=c4*c5;
cout<<"c4*c5=";
c3.display();
c6=c4/c5;
cout<<"c4/c5=";
c3.display();
return 0;
}