找回密码
 注册

QQ登录

只需一步,快速开始

类运算符和友元运算符

[复制链接]
发表于 2008-9-29 20:20:27 | 显示全部楼层 |阅读模式
<P>因为在C++中我们要特别注意类要符合<FONT color=#0000ff>数据封装</FONT>的要求,这就使运算符重载时访问类的私有成员出现障碍,要解决这个问题,就用到了<FONT color=#0000ff>友元运算符</FONT>和<FONT color=#0000ff>类运算符</FONT>。</P>
; _* Z# t' Y3 S; b+ i8 P+ E" @0 F<P><FONT color=#0000ff>友元运算符</FONT>:上一章我们学过了<FONT color=#0000ff>友元函数</FONT>,其实友元运算符重载就是相当于定义一个友元函数,而这个函数是运算符重载的函数,<FONT color=#0000ff>友元函数</FONT>事实上是一个一般的函数,它没有this指针,但他可以访问类(定义了此友元函数的类)中的私有成员。其他的一般函数是不能访问类中的私有成员的。</P>0 W5 {& ~( V) H2 ]
<P><FONT color=#0000ff>类运算符</FONT>:还有另一种方法可以访问类的私有成员,那就是运用<FONT color=#0000ff>类运算符重载</FONT>,这与友元运算符重载有何<FONT color=#ff0000>区别</FONT>呢? 区别就在于,这个函数首先是<FONT color=#0000ff>类的成员函数(</FONT>不是一般函数),因为它是类的成员函数,自然就可以访问该类的私有成了,然后它是一个<FONT color=#0000ff>运算符函数</FONT>,这样就可以对运算符进行重载,二者的<FONT color=#0000ff>参数表</FONT>有所不同,友元运算符的函数参数表包括参加运算的所有对象,而类运算符则的参数表的参数是除本身以外的参加运算的对象,如有complex类的一个加法运算z=x+y;则友元运算符函数应被解释为z=operator +(x,y) ;类运算符则是z=x.operator +(y);后者只有一个参数。</P>, n( o0 F7 _. t, A. ~2 \* d
<P>另外,<FONT color=#ff0000>什么时候用类运算符或用友元运算符呢</FONT>?如果运算符所需的操作数,尤其是和一个数希望进行<FONT color=#0000ff>隐式类型转换</FONT>时,应该用<FONT color=#0000ff>友元运算符重载</FONT>;如果一个运算符的操作需要<FONT color=#0000ff>修改类对象的状态</FONT>,则应当使用<FONT color=#0000ff>类运算符</FONT>。注意<FONT face=黑体>=、()、[]、-&gt;</FONT>这4个运算符<FONT color=#ff0000>只能用类运算符重载</FONT>。(</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|本地广告联系: QQ:905790666 TEL:13176190456|Archiver|手机版|小黑屋|汶上信息港 ( 鲁ICP备19052200号-1 )

GMT+8, 2025-4-18 10:24

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表