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
发布了120 篇原创文章 · 获赞 27 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_24890953/article/details/104107941
今日推荐