前面我们学过了使用类定义用户的类型以及类的两个特殊的成员函数——构造函数和析构函数,在这一讲中我们将学习啥呢?往下看吧!!
在这一讲中,我们将学习运算符重载、友元函数以及类的自动转换和强制转换类型。
【运算符重载】
- 【概述】
我们之前学过了函数重载(或函数多态),旨在让我们能够用同名函数来完成相同的基本操作,即使这种操作被用于不同的数据类型。
如今,运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。实际上,很多运算符已经被重载,比如*运算符,将它用于地址,将得到存储在这个地址中的值,但将它用于两个数字时,得到的是它们的乘积。C++根据操作数的数目和类型来决定采用哪种操作。
运算符重载的革命性意义在于它被扩展到用户定义的类型,例如可以使用+将两个对象相加。
要重载运算符,需使用一种特殊函数形式,它被称为运算符函数。运算符函数的格式如下:
operator op (参数列表) //注:应该没有空格,此处只为了表达清楚
例如,operator*()重载*运算符,operator-()重载-运算符,operator[]()将重载[]运算符。op必须是有效的C++运算符,不能虚构一个新的符号(如@)。
- 【示例】
下面我们看一个运算符重载示例,我们将通过这个示例解读运算符重载的“神秘”:
如果今天早上在Tom的账户上花费了2小时35分钟,下午又花费了2小时40分钟,则总共花了多长时间呢?这个示例与加法概念很吻合,但要相加的单位(小时与分钟的混合)与内置类型不匹配。我们将采用一个使用成员函数来处理加法的Time类。首先使用一个名为Sum()的成员函数,然后介绍如何将其转换为重载运算符。
首先是这个类的声明:
1 // mytime0.h -- Time class before operator overloading 2 #ifndef MYTIME0_H_ 3 #define MYTIME0_H_ 4 5 class Time 6 { 7 private: 8 int hours; 9 int minutes; 10 public: 11 Time(); 12 Time(int h, int m = 0); 13 void AddMin(int m); 14 void AddHr(int h); 15 void Reset(int h = 0, int m = 0); 16 const Time Sum(const Time & t) const; 17 void Show() const; 18 }; 19 #endif