失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 用成员函数和友元函数重载运算符

用成员函数和友元函数重载运算符

时间:2020-08-20 20:51:05

相关推荐

用成员函数和友元函数重载运算符

一元运算符

首先明白什么是一元,二元和多元运算符,比如++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指针,所需操作数都必须在参数表中显示声明,很容易实现类型的隐式转换

如果觉得《用成员函数和友元函数重载运算符》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。