计算机二级C++重载双目运算符概述

引导语:运算符,用于执行程序代码运算,会针对一个以上操作数项目来进行运算。以下是本站小编分享给大家的计算机二级C++重载双目运算符概述,欢迎阅读!

计算机二级C++重载双目运算符概述

  一。作为类成员函数的重载

为了能进行类对象和一个整型值的加法运算,需要写一个类的成员函数来重载双目加法(+)运算符。该函数在类中的声明如下:

Date operator + (int) const;

函数的声明指出,返回值是一个Date类对象,函数名是运算符+,只有一个整型参数,而且函数是常量型的。当编译器发现某个函数以加上前缀operator的真实运算符作为函数名,就会把该函数当作重载运算符函数来处理。如果在表达式中,该运算符的左边是一个类对象,右边是一个参数类型的一个对象,那么重载运算符函数就会被调用。调用形式如下:

Date dt(6,9,2005);

dt=dt+100;

也可以显式的调用重载运算符函数:

ator + (100);

下面代码重载了双目加法运算符来计算一个整数和一个Date类对象之和,并且返回Date类对象。

#include iostream.h

class Date

{

int mo,da,yr;

static int dys[];

public:

Date(int m=0,int d=0,int y=0)

{ mo=m; da=d; yr=y;}

void display() const

{ cout < Date operator + (int) const;

};

int Date::dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

Date Date::operator+(int) const

{

Date dt=*this;

n+=;

while(n >=dys[-1])

{

n-=dys[-1];

if(++==13)

{

=1;

dt,yr++;

}

}

=n;

return dt;

}

int main()

{

Date olddate(1,1,2005);

Date newdate;

newdate=olddate+100;

lay();

return 0;

}

 二。非类成员的运算符重载

在重载运算符的.原则中说到,要保持运算符的可交换性。而上面的程序只允许Date类对象在运算符的左边而整型值在右边,不支持下面的语句:

Date newdate=100+olddate;

所以,仅仅靠一个类的成员重载运算符是无法实现上面功能的。对重载双目运算符的类成员函数来说,总是认定调用函数的对象位于运算符左边。不过,我们可以再写一个非类成员的重载运算符函数,可以规定Date类的对象在运算符右边,而别的类型在运算符左边。例如,我们可以这样在类的外部定义一个函数:

Date operator + (int n,Date & dt)

下面代码在原先的基础上增加了一个非类成员函数来实现双目加法运算符的重载。

#include iostream.h

class Date

{

int mo,da,yr;

static int dys[];

public:

Date(int m=0,int d=0,int y=0)

{ mo=m; da=d; yr=y;}

void display() const

{ cout < Date operator + (int) const;

};

int Date::dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

Date Date::operator+(int) const

{

Date dt=*this;

n+=;

while(n >=dys[-1])

{

n-=dys[-1];

if(++==13)

{

=1;

dt,yr++;

}

}

=n;

return dt;

}

Date operator + (int n,Date & dt)

{

return dt+n;

}

int main()

{

Date olddate(1,1,2005);

Date newdate;

newdate=olddate+100;

lay();

return 0;

}