运算符重载详解(C++)

Eddy 发布于2011-4-17 15:51:41 分类: 程序设计 已浏览loading 网友评论0条 我要评论

所谓运算符重载就是运用函数重载的方法,对C++提供的标准运算符重新定义,完成某种特定的操作。

特点:

使用operator关键字对重载函数进行标识和定义。operator +(a,b)、operator -(a,0)、operator ++(a)。

参数个数固定。重载函数的参数个数与标准运算符保持一致。

针对类对象进行操作。

实例重载“+”运算符:

#include "stdio.h"
class CAdd
{
public:
 CAdd()
 {
  m_Operand=0;
 }
 CAdd(int value)
 {
  m_Operand=value;
 }
public:
 int m_Operand;
};
//重载+运算符,操作CAdd类
//第一个参数类型是CAdd, 返回类型是CAdd
CAdd operator +(CAdd  a, int b)
{
   CAdd  sum;
 sum.m_Operand=a. m_Operand +b;
    return sum;
}
int main(int argc, char* argv[])
{
 CAdd a(5),b;
    b=a+8;
 printf("sum is %d\n",b.m_Operand);
 
 return 0;
}

将运算符重载为友元函数和成员函数。

上面的实例不能访问类的私有成员。由于重载运算符针对类对象进行操作,所以通常将运算符重载定义为类的友元函数,或定义为类的成员函数。如:

#include "stdio.h"
class CAdd
{
public:
 CAdd()
 { m_Operand=0; }

 CAdd(int value)
 {
  m_Operand=value;
 }
    //重载为成员函数
 CAdd operator +(CAdd b)
 { 
//this为第一个默认参数,类的非静态成员函数都有一个默认参数this(指针类型)。
    CAdd sum;
 sum.m_Operand=this->m_Operand+b.m_Operand;
    return sum;
 }
 operator int ()
    {
    return m_Operand;
    }
    //重载为友员函数,可访问私有成员
    CAdd friend operator +(CAdd  a,int b)
    {
 a.m_Operand+=b;
    return a;
    }

private:
 int m_Operand;
};

int main(int argc, char* argv[])
{
 CAdd a(5),b,c(1);
 b=a+8;   //调用友元函数
 printf("sum is %d\n",(int)b);
 b=a+c;   //调用成员函数
 printf("sum is %d\n",(int)b);
   
 return 0;
}

除了常规形式调用重载的运算符,还可以用operator关键字形式调用,如:b=operator+(a,8);

还有个好玩的问题,虽说简单,但看了老一会才看明白……

int a=0,b=4;
int &c=(a=b);

c=?

c的值为多少呢?

c的值应该是4,但c是a的引用。

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/760.html     欢迎订阅Eddy Blog

关于 运算符  重载  详解  C  的相关文章

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言