c++重载后置自加运算符实例说明



c++重载后置自加运算符实例说明:

#include <iostream>
using namespace std;
class num
{
public:
int x;
num(){n=1;cout<<”构造函数执行!n”;}
num(int i){n=i;cout<<”带参数的构造函数执行!n”;}
num(const num&s){this->n=s.n;cout<<”复制构造函数执行!n”;}
~num(){cout<<”析构函数执行!n”;}
int get()const{return n;}
void set(int x){n=x;}
void add(){++n;}//定义自加函数错误: expected ‘;’ before ‘:’ toke
const num &operator ++(){//前置自加,const关键是防止返回后再自加,也就是避免++++之类的出现, 引用‘&’的使用为了避免复制构造函数的调用,operator是c++关键字函数名,与普通重载数相同,c++已定义运算符的类型,其后的++表示重载的是自加运算符,{}里面的是实现部分
++n;

return *this;//*shis为原始对象
}

const num operator ++(int o){//后置自加,参数o的作用只是作为与上面的函数区别,const关键是防止返回后再自加,也就是避免++++之类的出现, 引用‘&’的使用为了避免复制构造函数的调用,operator是c++关键字函数名,与普通重载数相同,c++已定义运算符的类型,其后的++表示重载的是自加运算符,{}里面的是实现部分
num tem(*this);
this->n++;//this->可以省略
return tem;

}
private:
int n;
};
int main()
{
num i;
//i.add();//调用成员函数实现自加
num y=i++;//后置自加
cout<<”i:”<<i.get()<<endl;//后置自加后i的成员值
cout<<”y:”<<y.get()<<endl;//后置自加后y的成员值
//y++;这是错的因为i是对象,并没有自加运算
return 0;
}