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

来源:互联网 发布:鉴声师鉴声用什么软件 编辑:程序博客网 时间:2024/04/30 07:01

主要讲下运算符的重载/


//运算符重载的语法格式: 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指针的情况。此时的运算符函数用类的友元函数表示
注意对于 = ,(),[],->运算符只能使用成员函数重载*/

原创粉丝点击