友元函数在使用时需要注意的一个问题

在c++标准中,若友元函数的类在名字空间‘myNamespace’定义,那么友元函数和该类都是namespace ‘myNamespace’的成员

例如,在实现复数类Complex的运算符重载时,若有如下定义:

 

namespace myComplex

{

      class CComplex

      {

      public:

      

      friend CComplex 
operator +(const CComplex& refNewComp1, const CComplex& refNewComp2);
      friend CComplex 
operator -(const CComplex& refNewComp1, const CComplex& refNewComp2);
      friend CComplex 
operator *(const CComplex& refNewComp1, const CComplex& refNewComp2);

       

      };

}

那么,这些友元函数要么在名字空间‘myComplex’作用域内实现,
要么加上作用域操作符 ‘::’,在其作用域外实现之。

CComplex myComplex::operator+(const CComplex& refNewComp1, const CComplex& refNewComp2)

试想,如果没有‘myComplex::’你可能说友元函数‘CComplex& operator+(const CComplex& refNewComp1, const CComplex& refNewComp2) ’是名字空间 ‘myComplex’的成员,但是编译器不那么认为,编译器认为该友元函数是全局命名空间的函数。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值