/*友元函数重载++*/
//从友元函数的角度来进行重载,这可以与利用成员函数进行重载的结果
//进行比较
#include <iostream>using namespace std;
class increase
{
public:
increase(int i){value=i;};
increase(){value=0;}
void display();
friend increase operator ++(increase&a);//前缀,友元
friend increase operator ++(increase&a,int);//后缀,友元
private:
int value;
};
void increase::display()
{
cout<<"value"<<value<<endl;
}
increase operator++(increase&a)
{
a.value++;
return a;
}
increase operator ++(increase&a,int)
{
increase temp(a);
a.value++;
return temp;
}
void main()
{
increase a,b,n;//此时调用的是默认的构造函数
for(int i=0;i<10;i++)
a=n++;//先赋值,再进行自加;
cout<<"n=";
n.display();//从结果可以看出来,n=10,而a=9
cout<<"a=";
a.display();
for(int i=0;i<10;i++)
b=++n;//先进行自加,再进行赋值
cout<<"n=";
n.display();
cout<<"b=";
b.display();
}
/*程序的修改和补充,使用成员函数,并进行显示调用*/
#include <iostream>
using namespace std;
class increase
{
public:
increase(int i){value=i;};
increase(){value=0;}
void display();
friend increase operator ++(increase&a);//前缀,友元
friend increase operator ++(increase&a,int);//后缀,友元
increase &operator ++();//前缀,++i。成员函数形式。使用引用
increase operator ++(int);//后缀,i++。成员函数形式
private:
int value;
};
void increase::display()
{
cout<<"value"<<value<<endl;
}
increase operator++(increase&a)
{
a.value++;
return a;
}
increase operator ++(increase&a,int)
{
increase temp(a);
a.value++;
return temp;
}
increase &increase::operator ++()//前缀,++i。成员函数形式。使用引用
{
value++;
return *this;
cout<<"调用前置增量运算符函数!\n";
}
increase increase::operator ++(int)//后前缀,i++。成员函数形式。
{
increase temp;
temp.value=value++;
cout<<"调用后置增量运算符函数!\n";
return temp;
}
void main()
{
increase a,b,n;//此时调用的是默认的构造函数
for(int i=0;i<10;i++)
//a=n++;//先赋值,再进行自加;
/*由于使用了成员函数和友元函数,在隐式调用上会存在歧义*/
a=operator++(n);//前缀,++i。友元函数形式。
cout<<"n=";
n.display();//从结果可以看出来,n=10,而a=9
cout<<"a=";
a.display();
for(int i=0;i<10;i++)
//b=++n;//先进行自加,再进行赋值
/*由于使用了成员函数和友元函数,在隐式调用上会存在歧义*/
b=operator++(n,0);//后前缀,i++。友元函数形式。
cout<<"n=";
n.display();
cout<<"b=";
b.display();
cout<<"对成员函数的显式调用:后缀:\n";
increase c,d,e,f;
for(int i=0;i<10;i++)
c.operator++(0);//后缀
c.display();
d=c.operator++(0);
c.display();
d.display();
cout<<"对成员函数的显式调用:前缀:\n";
for(int i=0;i<10;i++)
e.operator++();//前缀
e.display();
f=e.operator++();
e.display();
f.display();
}