运算符重载函数作为类成员函数与友元函数的区别
来源:互联网 发布:wol网络唤醒 安卓 编辑:程序博客网 时间:2024/06/05 23:42
运算符重载函数作为类成员函数与友元函数
最近在学习C++的基础,简单地记一些笔记。
关于运算符重载函数作为成员函数还是友元函数的注意点:
当运算符重载函数作为类的成员函数时,要求操作数左边必须是一个对象,而函数的参数可以是同类的对象也可以是普通的变量。这要看具体的问题具体分析,比如下面的例子:
//作为类成员函数定义:Complex operator+(Complex &c1){ return new Complex(this.real+c1.real,this.image+c1.image);}//调用:(1)c3 = c1+c2; 即 c3 = c1.operator+(c2) //正确(2)c3 = c1+5; 函数原型:Complex operator+(int i){} //正确(3)c3 = 5+c1; //错误
以上第三种调用方式显然不能利用定义的重载运算符的,这是因为没有办法调用i.operator+(c1)。那么如果想要这么做,只能作为类的非成员函数,而且当要访问的数据为对象的私有成员函数时,则必须声明为类的友元函数。
重载运算符的规则
不允许用户自定义新的运算符,只能对已有的运算符进行重载
重载运算符不允许改变运算符原操作数的个数
重载运算符不能改变运算符的优先级
重载运算符函数不能有默认的参数,会导致参数个数不匹配
重载双目运算符(略:可参照以上的规则直接重载)
重载单目运算符(主要学习一下前置自增和后置自增)
Time Time::operator++(){ //前置自增 if(++sec >= 60){ sec -= 60; minute ++ ; } return *this;}Time Time::operator++(int){ //后置自增 Time temp(*this); sec ++ ; if(sec >= 60){ sec -= 60; minute ++ ; } return temp;}
区别:前置自增是返回自加后的自己,而后置自增是先返回未增加前的对象,然后对象再自加
比如:
int main(){ Time t1(34,59),t2; cout<<"time1 : "; t1.display(); ++t1; cout<<"time1 : "; t1.display(); t2 = t1++; cout<<"time1 : "; t1.display(); cout<<"time2 : "; t2.display();}
输出如下:
time1 : 34:59
++time : 35:0
time1++ : 35:1
t2 : 35:0
重载流插入运算符和流提取运算符
必须声明为该类的友元函数,原型如下:
friend ostream & operator<<(ostream &output,Complex &c);friend istream & istream>>(istream &input,Complex &c);
完
0 0
- 运算符重载函数作为类成员函数与友元函数的区别
- 运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数和友元函数
- C++运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数和友元函数
- C++运算符重载函数作为类成员函数和友元函数
- 10.2 运算符重载函数作为类成员函数和友元函数
- C++运算符重载 成员函数与友元函数
- 运算符-重载为成员函数 和友元函数的区别.
- 运算符-重载为成员函数 和友元函数的区别.
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- C++ 重载运算符 运算符重载函数作为类成员函数 重载运算符+
- 运算符重载 成员函数及友元函数
- 重载运算符之友元函数和成员函数
- C/C++ const 关键字详解
- 聪明是一种天赋,而善良是一种选择
- iOS开发之应用首次启动显示用户引导
- poj 3281 Dining 最大流
- vim tab设置为4个空格
- 运算符重载函数作为类成员函数与友元函数的区别
- 同步与异步、阻塞与非阻塞
- No_16_0310 Java基础学习第十五天
- ViewPager--页面引导界面
- 拉普拉斯变换的物理意义是什么?
- T511K表之工资常量SIINS的用途
- [IOS 开发] 推送通知
- 杭电1066
- 字符排序 蓝桥杯真题