您的位置:首页 > 编程语言 > C语言/C++

C++之重载操作符与友元

2015-03-01 10:58 375 查看
操作符重载c++多态的一种形式。重载函数形式:operator op(argument -list),其中op是操作符,操作符重载限制:

 1.重载后的操作符必须有至少一个用户自定义的类型(防止用户为标准类型重载操作符)。譬如不能重载操作符“-”去做double类型的减法

 2.使用操作符不能违反原操作符的语法规则。譬如你不能将一个求模操作符(%)重载成一个使用操作数:

 int x;

 Time shiva;

 %x;

 %shiva;

 同样不能修改原操作符的优先级

 3.不能定义新的操作符

 4.不能重载一下的操作符:

 sizeof-sizeof操作符

 .——成员操作符

 .*——成员指针操作符

 ::——作用域解析操作符

 ?:——条件操作符

 typeid——一个RTTI操作符

 const_cast——强制类型转换操作符

 dynamic_cast——强制类型转换操作符

 reinterpret_cast——强制类型转换操作符

 static_cast——强制类型转换操作符

 常用友元:重载<<操作符

 :

 void operator <<(ostream &os,const Time &t)——重载了<<操作符,能输出一个类对象,但不能拼接输出

 譬如:

 cout<<t1<<"sdfsda"<<endl;

 当cout<<t1时结束后,由于void oprator<<(),没有返回对象之后的<<都输出不了;

 修改为:ostream & operator<<(ostream &os,const Time &t)//返回一个ostream对象引用
 就可以拼接输出了。

#include "rational.h"
Complex0::Complex0()
{
m_real=m_img=0;
}
Complex0::Complex0(double real,double img)
{
m_real=real;
m_img=img;
}
Complex0 Complex0::operator+(const Complex0 &c1)
{
Complex0 sum;//定义函数局部变量用于返回,防止修改外面的值
sum.m_real=m_real+c1.m_real;
sum.m_img=m_img+c1.m_img;
return sum;
}
Complex0 Complex0::operator-(const Complex0 &c1)
{
Complex0 diff;
diff.m_real=m_real-c1.m_real;
diff.m_img=m_img-c1.m_img;
return diff;
}
Complex0 Complex0::operator*(const Complex0 &c1)
{
Complex0 result;
result.m_real=(m_real*c1.m_real)-(m_img*c1.m_img);
result.m_img=(m_real*c1.m_img)+(m_img*c1.m_real);
return result;
}
//friend methods
Complex0 operator~(Complex0 &c1)
{
Complex0 result;
result.m_real=c1.m_real;
result.m_img=-c1.m_img;
return result;
}

Complex0 operator*( Complex0 &c1,double d)
{
Complex0 result;
result.m_real=c1.m_real*d;
result.m_img=c1.m_img*d;
return result;
}
std::ostream & operator<<(std::ostream &os,const Complex0 & c)//重载<<
{
os<<"("<>(std::istream &is, Complex0 & c)//重载>>
{
if(cin.get()!='Q'||cin.get()!='q')
{
cout<<"enter your real:\n";
is>>c.m_real;
cout<<"enter your imginary:\n";
is>>c.m_img;
return is;
}
else
{
exit(0);//退出程序
}
}
Complex0 c1(3.0,4.0);//调用构造函数赋值
Complex0 c;
cout<<"请按下enter 键开始输入一个复数 (按Q 或q 退出:\n";
while(cin>>c)
{
cout<<"c is "<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 友元函数