运算符重载

什么是运算符重载?

C++中定义了一组基本的数据类型和适用于这些数据类型的运算符。例如可以用+运算把两个整形数相加,也可以用>运算符比较两个字符的大小。这些运算符给程序员提供了简洁的符号,用来表示对基本类型的对象的操作。这些运算符在C++中有确切的含义,并且是不可改变的。但对于用户定义的类,除了少数的运算符(如赋值、取地址、成员选择等)以外,C++并没有定义它们的含义。一般情况下他们是不能对对象进行操作的。
C++中通过运算符重载可以实现这个功能。

运算符重载可以实现:对用户定义的类的对象,也能直接用系统预定义的运算符进行操作,就可以使用户定义的类更像系统的内置类型,使用更加方便。


运算符重载的方法

运算符重载就是写一个函数解释某个运算符在某个类中的含义,这个函数可以使所重载的这个类的成员函数或全局函数(有些运算符重载需要声明为友元函数)
C++中规定,重载函数名为operator @,其中@为要重载的运算符。
注意:运算符重载不能改变运算符的运算对象数!
因此重载函数的形参个数(包括成员函数的隐式指针*this)与运算符的运算对象数相同。
重载函数可作为类的成员函数和全局函数,作为成员函数时,形参个数比运算符对象少1,因为成员函数有隐含参数this。因此把一目运算符重载为成员函数时,该函数无形参,二目运算符重载为成员函数时,有一个形参。

Rational类的+运算符重载

class Rational{
private:
int num;
int den;
void ReductFraction();
public:
Rational(int n=0;int d=1){
num=n;den=d;ReductFraction();
}
Rational operator+(const Rational &r1);
void display(){
cout<<num<<'/'<<den;
}
};
Rational Rational::operator+(const Rational &r1)
{
Rational tmp;
tmp.num=num*r1.den+den*r1.num;
tmp.den=den*r1.den;
tmp.ReductFraction();
return tmp;
}

重载了+运算符后Rational类的使用

Rational r1(1,6),r2(1,6),r3;
r3=r1+r2;//r3=r1.operator+(r2)

除了用内置运算符运算,运算符重载函数也可以直接用函数的形式进行调用。
由于重载函数主要对对象的数据成员进行操作,而数据成员一般为private类型,所以当运算符被重载成全局函数式,通常把此重载函数声明为类的友元函数,便于访问该类的私有成员。

Rational类的+运算符重载(友元函数)

class Rational{
friend Rational operator+(const Rational&r1,const Rational &r2);
private:
int num;
int den;
void ReductFraction();
public:
Rational(int n=0;int d=1){
num=n;den=d;ReductFraction();
}
void display(){
cout<<num<<'/'<<den;
}
};
Rational operator+(const Rational &r1,const Rational &r2){
Rational tmp;
tmp.num=r1.num*r2.den+r2.num*r1.den;
tmp.den=r1.den*r2.den;
tmp.ReductFraction();
return tmp;
}

特殊运算符的重载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。