您的位置:首页 > 其它

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

2013-01-01 13:58 183 查看
主要讲下运算符的重载/

//运算符重载的语法格式: 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指针的情况。此时的运算符函数用类的友元函数表示

注意对于 = ,(),[],->运算符只能使用成员函数重载*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: