| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4143 人关注过本帖
标题:关于函数调用运算符重载——高手过来帮忙啊
只看楼主 加入收藏
cpp
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-9-3
收藏
 问题点数:0 回复次数:8 
关于函数调用运算符重载——高手过来帮忙啊

有关函数调用运算符重载的问题,希望相关高手过来解释一下,不胜感激!

什么是函数调用运算符的重载,(请出示相关例子以助理解)它和下标运算符的重载有什么样的区别?什么是运算子类型,它和函数调用运算符的重载有什么关系?

用自定义的函数调用运算符调用函数与一般的调用函数有什么不同吗?

什么时候要重载函数调用运算符?

在书上看了一个为类Assc_array定义一个迭代算子的例子,还是不太明白。

搜索更多相关主题的帖子: 运算符 函数 重载 
2004-10-01 22:20
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

你看那本一定是翻译书,对吗?

2004-10-01 23:20
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
[转帖]不是我懒得说,转帖清楚

运算符重载增强了C++语言的可扩充性。在C++中,说明一个类就是说明了一个新类型。因此,类对象和变量一样,可以作为参数传递,也可以作为返回类型。在基本数据类型上,系统提供了许多预定义的运算符,它们可以用一种简洁的方式工作,例如“+”运算符:

int x,y;

y=x+y;这是表达两个整数相加的方法,非常简单 。若有一个类:

class x{ public: int y; //.... };

void main() { x a,b; //定义了两个对象 a.y=a.y+b.y; //将两个对象的数据内容相加 //... }

从上面的例子看出,这样表达不如前面的简洁,也不直观;而且还存在一个问题, 若类x中的y为私有成员,上述表达式a.y=a.y+b.y就是错误的。因此,人们为了表达上的方便,希望已预定义的运算符(如+,-,*,/等),也可 以在特定类的对象上以新的含义进行解释。如上面的表达式则希望变为a=a+b,这就需要 用重载运算符来解决。

在C++中,大多数系统预定义的运算符都能被重载。例如:

+ - * / % ^ & | ~ ! = < > += -= *= <== == != <= >= && || ++ -- [ ] ( ) new delete

也有一些运算符是不能被重载的,如:

. :: *(此处是指针的意思,上面的为乘) ? : #

重载运算符时,不能改变它们的优先级,不能改变这些运算符所需操作数的数目。

在C++中,通常将运算符重载运算符的成员函数称为运算符函数。

(1)在类定义体中声明运算符函数

形式: type operator@(参数表)

type为返回值类型,operator是关键字,@代表所要重载的运算符号,参数表中罗列的是该运算符需要的操作数。例如:

class x{ //... int y; x operator + (x a); };

(2)定义运算符函数

形式: type x::operator @(参数表) { //定义的操作 }

例如: x x::operator + (x a) { x b; b.y=y+a.y; return b; }

void main() { x a1,b1; y a2,b2; a1=a1+b1; //正确,因为类x的“+”号已重载 a2=a2+b2; //错误,因为类y的“+”号没有重载 }

对类x的对象来说,“+”已经被赋予了重新的运算意义,不再是系统预定义含义。

[此贴子已经被作者于2004-10-01 23:36:40编辑过]

2004-10-01 23:30
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

类的重载其实就是普通类型重载用到类上而已,不过要加operator关键字。

类的重载分为友元和非友元两种,其实也差不多,只是形式上不同而已。

http://jpk.shcemt.edu.cn/cplus/kejian/CONTENT/chapter7/chapter7_2_1.htm

2004-10-01 23:40
cpp
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-9-3
收藏
得分:0 

这些我知道

斑竹还是给我讲一讲具体到函数调用运算符重载的意义,还有帮我解释一下“运算子类型”这个术语的意思吧?

不胜感激!!

2004-10-02 20:59
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

意义就是,例如你定义了一个类live41,而里面有几个变量,如果你想把它们相加,那要做几次,如果重载了加号,那只要把类名相加,一次就完成。

运算子类型我没听过,大概是翻译者自己创的吧。

2004-10-02 23:06
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 

还有一点要注意。

比如:

class A{.....};

class B{

operator = ()

{....}

};

void main()

{

A a1;

B b1=a1; //此处并没有调用=号重载运算符,并且可能会引起编译或运行时的错误。

b1=a1;//此处正确调用了=号重载运算符。

2004-10-05 00:29
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
楼上说我也没注意到,谢谢楼上的。
2004-10-05 01:40
hui惠
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-7-12
收藏
得分:0 
希望能够讲一下具体怎样调用。谢谢了!
2010-08-08 12:31
快速回复:关于函数调用运算符重载——高手过来帮忙啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042340 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved