C++PrimerPlus 学习笔记 | 第十一章 使用类 | 1.运算符重载

运算符重载

运算符重载是一种形式的C++多态,运算符重载将前面的函数重载重载运用到运算符上,允许赋予C++运算符多种含义。实际上许多C++(也包括C语言)运算符都已经被重载。C++根据操作数的数量和类型确定使用那种运算符。C++允许将运算符重载扩展到用户自定义的类型。

例如相加两个数组一般写法是

for (int i = 0; i < size; i++){
    dest[i] = s1[i] + s2[i];
}

但是通过重载运算符可以写成

dest = s1 + s2;

这种简单的加法隐藏了内部实质,并强调了实质,这是OOP另一个目标。

要重载运算符,需要使用被称为运算符函数的特殊函数形式,运算符函数的格式如下

operator运算符 (参数列表);
operator+ (const Car&);

其中运算符必须有效,不能建立一个新的运算符,比如@。

来看一个简单的加法实例

// Array20.h
#ifndef ARRAY20_H
#define ARRAY20_H
class Array20
{
public: // 此处为了现实方便将数组变为公共成员。
    int array[20];
    Array20 operator+(const Array20&);
};
#endif //ARRAY20_H
// Array20.cpp
#include "Array20.h"
Array20 Array20::operator+(const Array20 & a)
{
    Array20 sum;
    for (int i = 0; i < 20; ++i) {
        sum.array[i] = array[i] + a.array[i];
    }
}
// 函数调用
Array20 a,b; 
// 假设初始化
Array c = a + b;

重载限制

多数C++运算符都可以被重载,重载的运算不必一定是成员函数(特殊运算符号除外),但至少有一个为用户自定义类型。

  1. 重载运算符必须有一个是用户定义的类型,这是防止用户为标准类型类型重载运算符
  2. 使用运算符时不能违反原来的语法规则,该有几个操作数就要重载几个操作数
  3. 不能修改运算符的优先级,在没有括号的情况下,运算符优先级不变。
  4. 不允许用户定义新的运算符
  5. 不能重载以下运算符

见菜鸟教程-C+±重载运算符

https://www.runoob.com/cplusplus/cpp-overloading.html

image-20220217100727547

还有 typeid

const_cast

dynamic_cast

reinterpret_cast

static_cast

除了上述强制的规定外,在重载运算符应该遵守明智的限制,例如不把两个时间类的加法运算符定义为一个赋值为另外一个。另外运算符虽然简单易用,但是相较于函数他缺少了函数名这一重要信息,没有办法表明他完成的工作,所以最好能够定义一个有说明性的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值