运算符重载 非成员及成员函数区别

 ## **运算符重载为成员函数**
  • 对于 前置 ++ 后置++ 运算符重载为成员函数
  •  后置++        clock  clock::operator ++(int);     参数列表中并未使用的参数,不允许给出参数名,仅为区别前置++
    
  • 前置++ clock& clock::operator++(); {引用传递,仅限全局变量,局部变量不可}
  • 如果 类的数据成员包含指针变量 char *name;
  • 那么 初始化时 需要动态分配内存 name= new char [strlen(pname)+1] ;strcopy(name,pname);

运算符重载为非成员函数

#include<iostream>
using namespace std;
class ocomplex{
 double real;
 double image;
 public:
           ocomplex(double i=0.0,double j=0.0):real(i),image(j){}
  friend   ocomplex operator-(const ocomplex &one,const ocomplex &two);
  friend   ocomplex operator+(const ocomplex &one,const ocomplex &two);
  friend   ostream&  operator<<(ostream &putout,const ocomplex &one);     //输入输出流为参数时  不可设置为 const
 
  };
     ocomplex operator-(const ocomplex &one,const ocomplex &two)
     {
         return ocomplex(one.real-two.real,one.image-two.image);
     }
 ocomplex operator+(const ocomplex &one,const ocomplex &two)
 {
      return ocomplex(one.real+one.real,one.image+two.image);
 }
ostream&  operator<<(ostream &putout,const ocomplex &one)
{
    putout<<"("<<one.real<<","<<one.image<<")";
    return putout;
}


int main(void)
{
   ocomplex one(5,4),two(3,2),three;
   three=one+two;
   cout<<"three=one+two="<<three;
   return 0;
}

运算符重载为成员和非成员函数区别

  • 成员函数 : 重载方式较方便
  • 非成员函数 :
  • 1.当操作符的第一个操作数为不可更改类型,系统类型,如ostream类型 无法向其中添加成员函数,只能设置为非成员函数
  • 2.使用更加灵活,只需有一个运算符重载的目标对象就可且不论左右位置,另一个可以隐形转换。
  • 成员函数使用时,左操作数必须是目的对象,且不可转换,但参数列表的参数值可以隐示转换
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值