一元运算符
首先明白什么是一元,二元和多元运算符,比如++a、b--属于一元运算符,因为参与运算的参数只有一个,以此类推二元运算符就是参与运算的参数有两个,比如a+b。
一元运算符可以表示为:Object op\op Object
重载为成员函数为:Object.operator op(),操作数有对象Object通过this指针隐含传递。
重载为友元函数为:operator op(Object),操作数由参数表的参数Object提供。
再开始分析自增,自减操作符时,我们要理解:
前置自增、自减是参数先自增、自减运算完之后再使用(先运算,再使用)
后置自增、自减是参数先使用再自增、自减(先使用,再运算)
重载前置++和前置--操作符
全局函数
Complex &operator++(Complex &c){c.m_a++;c.m_b++;return c;}int main(){Complex c(1, 2);++c;c.PrintVal();system("pause");return 0;}
成员函数
class Complex {Complex &operator--(){this->m_a--;this->m_b--;return *this;}};int main(){Complex c(1, 2);--c;c.PrintVal();system("pause");return 0;}
重载后置++和后置--操作符
全局函数
Complex operator++(Complex &c,int){Complex temp = c;c.m_a++;c.m_b++;return temp;}int main(){Complex c(1, 2);c++;c.PrintVal();system("pause");return 0;}
成员函数
class Complex{Complex operator++(int){Complex temp = *this;this->m_a++;this->m_b++;return temp;}};int main(){Complex c(1, 2);c++;c.PrintVal();system("pause");return 0;}
对于下面参数中的int,是一个占位符,作用是与前置++,前置--相区别。编译器区分用的。
Complex& operator++(Complex &c,int)Complex &operator++(int)
运算符重载过程
1、首先承认操作符重载是一个函数,定义函数名operator++
2、分析函数参数,根据左右操作数的个数 operator++(Complex &c)
3、分析函数返回值,函数返回值充当左值 需要返回一个引用。
友元函数和成员函数选择
1.、当无法修改左操作数的类时,使用全局函数进行重载
2、=、[]、()和->操作符只能通过成员函数进行重载
3、类成员函数方法无法实现 << 操作符重载
无法修改左操作数的类时,怎么理解?意思就是说我们无法修改ostream和istream类,只能通过全局函数进行重载,
用友元函数重载<<、>>操作符
istream 和 ostream 是 C++ 的预定义流类cin 是 istream 的对象,cout 是 ostream 的对象运算符 << 由ostream 重载为插入操作,用于输出基本类型数据运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据用友员函数重载 << 和 >> ,输出和输入用户自定义的数据类型用友员函数重载 << 和 >> ,输出和输入用户自定义的数据类型
friend ostream& operator<<(ostream &out, Complex &c)friend istream& operator>>(istream &in, Complex &c)
注:函数返回值充当左值 需要返回一个引用
友元函数重载操作符使用注意点
1.友员函数重载运算符常用于运算符的左右操作数类型不同的情况
2.在第一个参数需要隐式转换的情况下,使用友元函数重载
3.友元函数没有this指针,所需操作数都必须在参数表中显示声明,很容易实现类型的隐式转换
如果觉得《用成员函数和友元函数重载运算符》对你有帮助,请点赞、收藏,并留下你的观点哦!