C++

您所在的位置:网站首页 重载下标运算符为什么函数返回值是引用 C++

C++

2023-12-26 20:49| 来源: 网络整理| 查看: 265

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