递增、递减 运算符重载
//每日心得:独上高楼,望尽天涯路
//日期:12.14
//学习内容:递增、递减 运算符重载
//重点:
//递增运算符重载
//1、前置递增 返回 类的变量自身 (可用于== 重复 递增==) ++(++p) 合法
//2、后置递增 返回 局部变量的值 (不可用于 重复 递增) ++(p++)合法 (p++)++ 非法!(表达式必须时可修改左值)
#include<iostream>
using namespace std;
class myInteger
{
public:
myInteger():m_num(0)
{
}
~myInteger()
{
}
friend ostream& operator <<(ostream& out, myInteger num)
{
out << num.m_num << endl;
return out;
}
//重载前置++运算符递增(++i)
myInteger& operator ++() //返回一个 自身的别名 可以反复++ 如:++(++num) 改变自身 (而不是改变值)
{
//先进行 ++ 运算
m_num++;
//返回自身
return *this;
}
//重载后置++运算符递增(i++)
//void operator ++ (int) int 代表占位参数 ,可以区分 前置 和 后置
myInteger operator ++ (int) // 如果不加 int -> 重定义 (返回值不能 重载条件)
{
//先记录 当时结果
myInteger temp = *this; //(*this 代表 当时结果)
//后递增
m_num++;
//最后将记录结果做返回
return temp;
//不能返回 局部变量 的引用 (函数结束时 局部变量 被销毁)
}
myInteger& operator --() //前置返回用引用
{
m_num--;
return *this;
}
myInteger operator --(int)//后置返回用 类的值(不用引用),且定义要加 int 占位
{
myInteger temp = *this;//记录
m_num--;//传入值改变
return temp;//返回记录
}
private:
int m_num;
};
void test1()
{
myInteger num1;
cout <<"num1 递增前 "<<num1;
cout << "num1 前置递增后 " << ++num1;
}
void test2()
{
myInteger num2;
cout << "num2 递增前 " << num2;
cout << "num2 后置置递增后 " << num2++;
cout << "最后为:" << num2;
}
void test3()
{
myInteger num3;
cout << "num3 递减前 " << num3;
cout << "num3 前置递减后 " << --num3;
myInteger num4;
cout << "num4 递减前 " << num4;
cout << "num4 后置置递减后 " << num4--;
cout << "最后为:" << num4;
}
int main()
{
test1();
test2();
test3();
return 0;
}
总结
衣带渐宽终不悔,为伊消得人憔悴。