目录
前言
在C++ 编程中,运算符重载是一项强大且实用的特性,它允许我们赋予运算符在自定义类上的新含义,极大地增强了代码的可读性和易用性。今天,我们就以日期类( Date )为例,深入探讨运算符重载的相关知识。
一、运算符重载基础
1.1 运算符重载原理
C++ 引入运算符重载机制,让我们能像使用内置类型运算符那样操作自定义类对象。运算符重载本质上是定义特殊函数,函数名由关键字 operator 和要重载的运算符组成,比如 operator+ 、 operator= 。其函数原型形如:返回值类型 operator 运算符(参数列表) 。
不过,有几点需要注意:
– 不能随意创造新运算符,比如 operator@ 这种是不允许的。
– 重载操作符必须有一个类类型参数。
– 对于内置类型的运算符,不能改变其原本含义,像 int 类型的 + 号,语义不能被篡改。
– 作为类成员函数重载时,形参数量比操作数少1,因为第一个参数是隐藏的 this 指针。
– 有一些运算符不能重载,例如 . * 、 :: 、 sizeof 、 ? : (考点) 。
1.2 示例代码
以 Date 类为例,下面是重载 == 运算符的简单实现:
cpp
class Date
{
public:
Date(int year = 1900, int month = 1, int day = 1)
: _year(year), _month(month), _day(day) {}
private:
int _year;
int _month;
int _day;
};
bool operator==(const Date& d1, const Date& d2) {
return d1._year == d2._year
&& d1._month == d2._month
&& d1._day == d2._day;
}
二、赋值运算符重载
2.1 赋值运算符重载格式
赋值运算符重载函数一般具有以下特征:
– 参数类型: const T& ,采用传递引用的方式,能提高传参效率,避免对象拷贝。
– 返回值类型: T& ,返回引用可以提高返回效率,同时支持连续赋值,比如 a = b = c 。
– 函数内部要检测是否是自己给自己赋值,避免不必要的操作(不建议暴力检查)。
– 最后返回 *this ,以符合连续赋值的语义。
平台声明:以上文章转载于《CSDN》,文章全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅作参考。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/nplplus/article/details/147016206