C++ |
您所在的位置:网站首页 › 重载下标运算符为什么函数返回值是引用 › C++ |
1. 运算符重载
1.1 基本概念
函数重载(函数多态)是指用户能够定义多个名称相同但参数列表不同的函数,旨在使用户能够用同名的函数来完成相同的基本操作,即使这种操作被用于不同的数据类型。 运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。 实际上,很多C++(也包括C语言)运算符已经被重载。例如,将*运算符用于地址,将得到存储在这个地址中的值;但用于两个数字时,得到的是它们的乘积。 C++允许运算符重载扩展到用户自定义的类型,例如,允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用哪种假发定义。重载运算符可使代码看起来更自然。例如,将两个数组相加通常使用for循环实现: for(int i=0; i< 10; i++){ A[i] = B[i] + C[i]; }但在C++中,可以定义一个表示数组的类,并重载+运算符。于是便有如下语句: A = B + C; 1.2 运算符重载函数格式要重载运算符,需使用被称为运算符函数的特殊函数形式。运算符函数的格式如下: operatorOP(param1, param2, ...)例如,operator+()表示重载+运算符,operator*()表示重载*运算符。OP必须是有效的C++运算符,不能虚构一个新的符号,例如不能有operator@()这样的函数,因为C++中没有@运算符。 1.3 案例:重载运算符+time.h #ifndef TIME_H #define TIME_H class Time{ private: int hours; int minutes; public: Time(); Time(int h, int m = 0); // 注意:此处不能h和m都设置默认值,否则将和Time()冲突 void addMin(int m); void addHour(int h); void resetTime(int h = 0, int m = 0); Time operator+(const Time &t) const; // 运算符重载 void show() const; }; #endif如果Time(int h = 0, int m = 0);均设置默认值,使用时创建对象Time t;编译器将不知道是该调用默认构造函数还是带参构造函数(因为带参构造两个参数均有默认值,均可以省略)。 头文件管理: 在同一个文件中只能将同一个头文件包含一次。记住这个规则很容易,但很可能在不知情的情况下将头文件包含多次。例如,可能使用包含了另外一个头文件的头文件。有一种标准的C/C++技术可以避免多次包含同一个头文件。它是基于预处理器编译指令#ifndef(即if not defined)的。下面的代码片段意味着仅当以前没有使用预处理器编译指令#define定义名称TIME_H时,才处理#ifndef和#endif之间的语句: #ifndef TIME_H ... #endif编译器是首次遇到该文件时,名称TIME_H没有定义(我们一般根据include文件名来选择名称,并加上一些下划线,以创建一个在其他地方不太可能被定义的名称)。 time.cpp #include #include "time.h" Time::Time(){ hours = minutes = 0; } Time::Time(int h, int m){ hours = h; minutes = m; } void Time::addMin(int m){ minutes += m; hours += minutes / 60; minutes %= 60; } void Time::addHour(int h){ hours += h; } void Time::resetTime(int h, int m){ hours = h; minutes = m; } 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; } void Time::show() const{ std::cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |