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对象引用
就可以拼接输出了。
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++中重载操作符表,可以帮助重载哪些操作符,以及到底是重载为类方法还是类的友元方法
- (转载)C++中重载操作符时什么时候定义成友元,什么时候定义为成员方法
- c++ 友元模板类的定义
- C++(一)友元
- C++重载操作符
- C++重载操作符于转换 笔记
- C++ 友元
- C++重载操作符于转换 笔记
- C++重载操作符
- [C++ rudiment]关于类的友元
- C++ 重载操作符基础
- 重温C++语法之友元
- C++复习 14 重载操作符与转换
- 漫漫编程路——C++篇(七)——关于重载操作符(二)
- C++友元
- [c++ primer plus]c++ 函数模版,类模版,实例化,具体化,模版作参数,模版的友元
- C++学习体会--友元
- c++学习(二 )——重载操作符
- 入门教程:实例详解C++友元
- c++ 友元(转)