运算符重载的问题?
#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::,而友元函数形式时不用?