#include <iostream>
using namespace std;
class Integer
{
int x;
public:
Integer(int x = 0):x(x){}
friend ostream& operator<<
(ostream& o,const Integer& i)
{
return o<<i.x;
}
//重载成成员函数,取反到底是怎么运算的?
const Integer operator~()
{
//返回的是临时值吗?就是它原本的值是不变的?草,真蛋疼,真想看看程序运行的时候变量的值是怎么变的。
return Integer(~x);
}
//前加加
Integer& operator++()
{
cout << "前加加" << endl;
x++;
//返回当前对象要使用引用
return *this;
}
//后加加,哑元
//返回的是临时值,不加引用
//第一个const让其不能作为左值
const Integer operator++(int)
{
cout << "后加加" << endl;
//有意思,先用临时值保存当前对象,再将当前对象的值加一,参与计算的是old,这个值其实已经变了
//最后返回的是未做改变的临时值
Integer old = *this;
x++;
return old;
}
//有一个成员的一个友元的,调用优先?
//重载成友元函数
//单目运算符不采用成员函数方式重载?
friend const Integer operator~(const Integer& i)/*这里非成员函数不能加const why */
{
return Integer(~i.x);
}
};
int main()
{
Integer i1 = 100;
cout << (~i1) << endl; //返回的是临时的还是?非引用和指针。但是返回类型是对象。改变了它本来的值吗?
int x = 10;
++x = 100; //运算优先级是怎么样子的?++在赋值号之前吗?对,优先级确实比赋值号高。
//所以下一行输出结果为100就了然了。
cout << "x = " << x << endl;
++i1;
cout << "i1 = " << i1 << endl;
++i1 = 200; //i1.operator++() = 200;
cout << "i1 = " << i1 << endl;
//x = 20;
//x++ +30 ; //50 表达式值为50,x++返回的是一个临时值,但是x的值已经成21了,
//1.x++ x = 21
//2.20 + 30
//3.50
//x++ = 300; //左值无效,但是前加加可以赋值,说明后加加返回的是临时值,前加加返回的是。。它本身?真是这样的话,那么整个程序也算是说得通。
i1 = 100; //为什么可以直接赋值?
//下两行没有任何理解问题,简单
cout << "i++:" << i1++ << endl;
cout << "++i:" << ++i1 << endl;
//==================================
}
/*
-101
x = 100
前加加
i1 = 101
前加加
i1 = 200
后加加
i++:100
前加加
++i:102
*/
重载前++,后加加(用到了呀元)
最新推荐文章于 2022-10-12 22:20:30 发布