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

主要讲下运算符的重载/


//运算符重载的语法格式: type X::operator @(参数表)...X为重载该运算符的类名
/*@为要重载的运算符的符号,operator是关键字。其中的关键字和重载运算符组成
可函数名。运算符被重载之后,原来的意思尚在,只是定义了相对一特定类的一个新的
运算符。
需要注意的事项时运算符重载是公有的*/




#include <iostream>
using namespace std;
class counter
{
unsigned int value;
public:
counter(){value=0;}
void operator ++();
void operator --();
unsigned int operator() ();//此处的重载运算符是()


};
void counter::operator++()
{
if(value<65535)
value ++;//测试下是否需要紧靠着
}
void counter::operator--()
{
if(value>0)
value--;
}
unsigned int counter::operator()()
{
return value;
}
void main()
{
counter my_counter;
for(int i=0;i<12;i++)
{
my_counter ++;
cout<<"\n my_counter="<<my_counter();
}
my_counter--;
my_counter--;
cout<<"\n my_counter="<<my_counter();
}
/*运算符重载时候,运算符函数只能是类的成员函数或者是友元函数
两者的区别在于:成员函数具有this指针,而友元函数没有this指针。
所谓的一元运算符,不论是前缀还是后缀,都需要一个操作数。
如a @  及@ a   其中的a是重载运算符@的类的对象
可以解释为a.operator @() 或者operator @(a)
可以简单地解释为a.operator @()一元运算符函数operator @ 所需的
一个操作数由对象a通过this指针隐含地传递,所以参数列表为空。此时,
运算符函数用类的成员函数表示。
若是operator @(a)则一元运算符函数operator @所需的一个操作数
在参数列表中由对象显式地提供,适用于没有使用this指针的情况。
这时的运算符函数用类的友元函数表示。
对于二元运算符:   a@b
可以解释为a.operator @(b)  或者operator @(a,b)
其中的a.operator @(b)可以解释为二元运算符函数 operator @
所需的一个操作数由对象a通过this指针隐含地传递。故只有一个参数
此时的运算符函数是成员函数
若是operator @(a,b)所需要的操作数在参数列表中由对象a和对象b显式
提供,适用于没有this指针的情况。此时的运算符函数用类的友元函数表示
注意对于 = ,(),[],->运算符只能使用成员函数重载*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值