重载++操作符的一些感悟
好久没总结东西了。在过一个多星期就可以结束实习了。刚好这段时间有空开始整理以前的学习笔记。哈哈,就当复习吧。
这一篇写的是关于C++重载操作符,代码比较简单,以++为例,其他也是相通的。
#include <iostream>using namespace std;class DefType{//ostream是一个类,平常用的cout就是它的实例。这里我们重载一下<<运算符//括号里面的两个参数os跟t,分别是<<左右两边的操作数//如果os不是引用类型会出现什么情况呢?为什么?friend ostream& operator<<(ostream& os, const DefType& t){return os<<t.m_iVale<<endl;}int m_iVale;public://显式定义构造函数explicit DefType(int i = 0):m_iVale(i){}//prefix++,前缀、前置//注意返回的类型是引用DefType& operator++(){++(this->m_iVale);return *this;}//postfix++,后缀、后置//注意返回的类型是带const,而且参数类型必须是int,否则会出现下面错误://error C2807: the second formal parameter to postfix 'operator ++' must be 'int'const DefType operator++(int){DefType tmp = (*this);//代码复用,调用前置操作符++(*this);return tmp;}};int main(){DefType dt(100);cout<<dt++;//自动调用后置操作符,输出的是100cout<<++dt;//自动调用前置操作符,输出的是102cout<<dt.operator++();//手动调用前置操作符,输出的是103cout<<dt.operator++(0);//手动调用后置操作符,输出的是103return 0;}
小结:1)前置跟后置的返回类型不一样的;
2)后置会带一个参数类型int,但并不会被用到,如果不加编译器会提示C2807错误;
3)前置要比后置效率高:后置会引入一个临时对象,同时调用前置的重载实现。