#include<stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
class A
{
public:
A(int a_, char ch_):a(a_),ch(ch_){}
void print(){ cout<<"a "<<a<<" ch "<<ch<<endl; }
A & operator++()
{
a++;
return *this;
}
A operator++(int c);
private:
int a;
char ch;
};
A A::operator++(int d)
{
A t=*this;
++*this;
return t;
}
int main()
{
A aa(3,'v');
cout<<"A aa(3,'v'); ";
cout<<"aa: ";
aa.print();
A bb=aa++;
cout<<endl<<"A bb=aa++;: ";
cout<<endl<<"bb: ";
bb.print();
cout<<"aa ";
aa.print();
cout<<endl<<"++aa: ";
++aa;
aa.print();
return 0;
}
i++ 和++i的重载。
++i返回的是引用,i++返回的是值。
几点结论:
1)++i效率更高一些。
2)重载时,++i返回引用;i++返回值,返回前先对原值做自增。
3)为了区别,i++的函数包含一个int参数。
但是:
1)重载时,只需要能区分出两个函数即可,因此如果只重载一个,就无所谓int参数问题。
2)也可以将int参数放在i++对应的函数上,没有问题。
3)只定义一个时,无论调用时i++还是++i形式,都将调用所定义的那个函数;定义两个时,如果隐式调用,那么就看返回值是引用还是值。