面向对象的程序设计-8-运算符重载-part3

本文深入探讨了友元函数重载与成员函数在类中的应用,通过实例展示了如何使用前缀和后缀友元函数进行自增操作,并与成员函数形式进行了对比。同时,介绍了如何在实际代码中通过显式调用成员函数来避免隐式调用的歧义性,以及在不同场景下选择合适的方法来优化代码性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*友元函数重载++*/

//从友元函数的角度来进行重载,这可以与利用成员函数进行重载的结果

//进行比较

#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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值