运算符重载的问题?

mufengqing 2004-03-04 03:11:35
#include <iostream>
using namespace std;
/***
运算符重载的友元函数形式
***/
class complex
{
public:
complex()
{
real=imag=0.0;
}
complex(double r)
{real=r;imag=0.0;}
complex(double r,double i)
{real=r;imag=i;}
friend complex operator+(const complex &c1,const complex &c2);
friend complex operator-(const complex &c1,const complex &c2);
friend complex operator*(const complex &c1,const complex &c2);
friend complex operator/(const complex &c1,const complex &c2);
friend void print(const complex &c);
private:
double real,imag;
};

complex operator+(const complex &c1,const complex &c2)
{
return complex(c1.real+c2.real,c1.imag+c2.imag);
}

complex operator-(const complex &c1,const complex &c2)
{
return complex(c1.real-c2.real,c1.imag-c2.imag);
}

complex operator*(const complex &c1,const complex &c2)
{
return complex(c1.real*c2.real-c1.imag*c2.imag,c1.real*c2.imag+c1.imag*c2.real);
}

complex operator/(const complex &c1,const complex &c2)
{
return complex((c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),
(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));
}

void print(const complex &c)
{
if (c.imag<0)
cout<<c.real<<c.imag<<"i";
else
cout<<c.real<<"+"<<c.imag<<"i";
}

int main()
{
complex c1(2.0),c2(3.0,-1.0),c3;
c3=c1+c2;
cout<<"\nc1+c2=";
print(c3);
c3=c1-c2;
cout<<"\nc1-c2=";
print(c3);
c3=c1*c2;
cout<<"\nc1*c2=";
print(c3);
c3=c1/c2;
cout<<"\nc1/c2=";
print(c3);
c3=(c1+c2)*(c1-c2)*c2/c1;
cout<<"c3=(c1+c2)*(c1-c2)*c2/c1=";
print(c3);
cout<<endl;
return 0;
}
/***
运算符重载的成员函数形式
***/
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////////////////////////
class complex
{
public:
complex()
{
real=imag=0.0;
}
complex(double r)
{
real=r;
imag=0.0;
}
complex(double r,double i)
{
real=r;
imag=i;
}
complex operator +(const complex &c);
complex operator -(const complex &c);
complex operator *(const complex &c);
complex operator /(const complex &c);
friend void print(const complex &c);
private:
double real,imag;
};

inline complex complex::operator+(const complex &c)
{
return complex(real+c.real,imag+c.imag);
}

inline complex complex::operator-(const complex &c)
{
return complex(real-c.real,imag-c.imag);
}

inline complex complex::operator*(const complex &c)
{
return complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);
}

inline complex complex::operator/(const complex &c)
{
return complex((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag),
(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag));
}

void print(const complex &c)
{
if(c.imag<0)
cout<<c.real<<c.imag<<"i";
else
cout<<c.real<<"+"<<c.imag<<"i";
}

int main()
{
complex c1(2.0),c2(3.0,-1.0),c3;
c3=c1+c2;
cout<<"\nc1+c2=";
print(c3);
c3=c1-c2;
cout<<"\nc1-c2=";
print(c3);
c3=c1*c2;
cout<<"\nc1*c2=";
print(c3);
c3=c1/c2;
cout<<"\nc1/c2";
print(c3);
c3=(c1+c2)*(c1-c2)*c2/c1;
cout<<"c3=(c1+c2)*(c1-c2)*c2/c1=";
print(c3);
cout<<endl;
return 0;
}

我想问:
(1)为什么虚函数参数不用指针而用引用,可以改成指针形式的吗?
(2)为什么成员函数形式的要用内联函数而友元函数不用?
(3)为什么实例化成员函数的虚函数时,operator前面要加complex::,而友元函数形式时不用?
...全文
21 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧