例如“+”法运算符并不能用于两个类或者两个数组直接相加,但有个方法可以用“+”操作符使其直接相加,那就是重载,这也是体现C++多态的一一种形式。
重载的声明:
返回值类型 operator 要重载但运算符 (传入的参数)
其实仔细看不难发现,重载的声明跟函数声明很像,只需要把函数名字改成 operator 要重载的运算符 即可。
我们通过一个使用类的例子来应用运算符重载。
声明一个时间类,包含小时和分,类成员函数详细内容不再写出。
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m = 0);
void AddHr(int h);
void AddMin(int m);
void Reset(int h = 0,int m = 0);
Time Sum(const Time & t)const;
void show()const;
}
此时我们可以调用类内函数Sum来求两个Time类型的和。
Time a,b;
a.Sum(b)const;
现在我们把类内函数Sum改成“+”法运算符的重载,实现相同的功能。
只需要将Time Sum(const Time & t)const;次函数声明的函数名改成operator+,如下:
Time operator+(const Time & t)const;
此时,我们就可以对a,b两个Time类型的数据直接相加。(函数内容就不再赘述)
重载的限制
-
1.所重载的运算符的运算中必须有一个数据类型是用户定义的,例如两个double类型做减法运算,然后你把“-”法运算符重载成加法的功能,那计算机到底该如何运算?
-
2.不能违反运算符原来的句法规则,例如不能用%去重载成一个声明变量的运算符。
int a;
% b; //invalid
- 3.你不能去创建一个新的运算符,例如**。
- 4.有一些运算符不能重载。
- 5.下面几个运算符只能通过成员函数进行重载。
赋值运算符 =
函数调用运算符 ()
下标运算符 []
通过指针访问类成员的运算符 ->
网友评论