#include <iostream>
#include <string>
using namespace std;
/*---------------------------------
18.48.重载自加运算符的执行次序
---------------------------------*/
class A
{
public:
A(int x){rx=x;}
friend ostream &operator<<(ostream &s,const A&c)
{ //用friend修饰变成类A的友元函数
s<<c.rx<<'\t';
return s;
}
int operator ++(){cout<<"++i"<<endl;rx++;return rx;}//前置自加
int operator ++(int){cout<<"i++"<<endl;int i=rx;rx++;return i;}//后置自加
private:
int rx;
};
void main()
{
A a(3);
/* 当给一个函数传进来的参数不是一个简单的变量,而是一个有运算的表达式时,
可能发生先把所有的表达式求值,再进行参数压栈的情况,也有可能一边求值,一边压栈
*/
//VC6.0中,编译器求参数值的顺序是从右至左,而且是先求值、然后再压栈
cout<<++a<<"\t"<<a++<<endl;
}
运行结果:
i++
++i
5 3
Press any key to continue
C++ 字符串 19-- 18.48.重载自加运算符的执行次序
最新推荐文章于 2023-07-17 04:00:00 发布