20200129-01 C++ 17 不能(无法)重载的运算符 及 可被重载运算符(按成员及非成员划分)

一、不能被重载的 C++ 运算符

不能被重载的操作符

" . " 成员运算符

" .* " 成员指针运算符

" :: " 域运算符

" sizeof " 长度运算符

" ?: " 条件运算符


二、可以被重载的 C++ 运算符(图片来自 Beginning C++17 )

英文含义:

如果是 NO 说明只能使用成员函数类型,YES 说明成员函数和非成员函数都可以, ONLY 只能使用非成员函数实现

成员函数:是指写在类或则结构体内的函数

class A { void getA();}

inline void getB() {}

其中 getA() 是 A 的成员函数, getB() 就是 A 的非成员函数


三、成员和非成员函数的选择

根据书本内容来看,是如非必要尽可能使用成员函数来重载操作函数,这样就可以直接使用操作函数更加合理

书中推荐使用非成员函数的两种情况

  1. 基本类型或与您所使用的类不同
  2. 需要对二进制运算符进行隐式转换时
情况一

ostream& operator<<(ostream& stream, const Box& box);  // you cannot add ostream members

情况二 隐式转化 class + num / num + class 及相关对象

bool operator<(double value, const Box& box);  // double cannot have member functions

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值