重载运算符作为成员函数还是非成员函数

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载运算符作为成员函数还是非成员函数相关的知识,希望对你有一定的参考价值。

一、定义为成员函数的运算符

1. 赋值、调用、下标、成员访问箭头运算符(=、()、[]、->)

2. 改变对象状态的运算符或者与给定类型密切相关的运算符(递增++、递减--、解引用*)

3. 复合赋值运算符(注:它也可以定义为非成员函数)

 

二、定义为非成员函数的运算符

1. 具有对称性的,即能转换任意一端的运算对象的运算符(算术、相等性、关系、位运算符) 

2. 输入输出运算符

 

三、为什么一定要定义为成员函数

把运算符定义为成员函数时,该运算符的左侧运算对象必须是运算符所属类的一个对象。

如:

string s;
// 赋值运算符=是string的成员函数 s = "world"; // 正确 "world" = s; // 错误

  

以上是关于重载运算符作为成员函数还是非成员函数的主要内容,如果未能解决你的问题,请参考以下文章

运算符重载(作为成员函数)

C++运算符重载中 重载为类的成员函数和重载为类的友元函数 的区别是啥?

重载运算符问题

C++类和对象(this指针6个默认成员函数const成员)

运算符重载三种形式(成员函数,友元函数,普通函数)详解

运算符重载的函数作为类的成员函数和友元函数