您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页运算符重载(C++)

运算符重载(C++)

来源:叨叨游戏网

运算符重载:

运算符重载是一种形式的C++多态(C++如何使用户能够定义多个名称相同但特征不同的函数的方法被称为函数多态,也称为函数重载)。
C++允许将运算符重载扩展到用户定义的类型,例如,允许使用+将两个对象相加。
例如,一个人早上花费了2小时35分钟,下午花费了2小时40分钟,求花费的总时间。

mytime0.h

#pragma once
#ifndef MYTIME0_H_
#define MYTIME0_H_

class Time {
private:
	int hours;
	int minutes;
public:
	Time();
	Time(int h, int m = 0);
	void AddMin(int m);
	void AddHr(int h);
	void Reset(int h = 0, int m = 0);
	Time Sum(const Time &t) const;
	void Show() const;
};

#endif // !MYTIME0_H_

Time类提供了用于调整和重新设置时间、显示时间、将两个时间相加的方法。其中,Sum函数表示的就是将两个时间相加的函数。
将Time类转换转化为重载的加法运算符很容易,只要将Sum()的名称改为operater +()即可。即:

mytime1.h

#pragma once
#ifndef MYTIME0_H_
#define MYTIME0_H_

class Time {
private:
	int hours;
	int minutes;
public:
	Time();
	Time(int h, int m = 0);
	void AddMin(int m);
	void AddHr(int h);
	void Reset(int h = 0, int m = 0);
	Time operater +(const Time &t) const;
	void Show() const;
};

#endif // !MYTIME1_H_

其中,重载运算符加号的函数方法如下:

Time Time::operator + (const Time &t) const {
	Time sum;
	sum.minutes = minutes + t.minutes;
	sum.hours = hours + t.hours + sum.minutes / 60;
	sum.minutes %= 60;
	return sum;
}

和Sum一样,operator +()也是由Time对象调用,它将第二个Time对象作为参数,并返回一个Time对象。因此,可以像调用Sum()那样来调用operator +()方法:

total = coding.operator + (fixing);

但将该方法命令为operator +()后,也可以使用运算符表示法:

total = coding + fixing;

这两种表示法都将调用operator +()方法。在运算符表示法中,运算符左侧的对象是调用对象,运算符右边的对象是作为参数被传递的对象。

可以将两个以上的对象相加吗?例如,如果t1、t2、t3和t4都是Time对象,t4 = t1 + t2 + t3是否成立。
答案是成立的,上述例子可以转化为t4 = t1.operator+(t2.operator+(t3));

重载:

多数C++运算符都可以用这样的方式重载。重载的运算符(有些例外情况)不必是成员函数,但必须至少由一个操作数是用户定义的类型。
C++对用户定义的运算符重载的:

声明:以上整理自个人理解和Stephen Prata 著的《C++ Primer Plus》

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务