所谓运算符重载就是运用函数重载的方法,对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。