C++基础(6)——类和对象(4)
前言
本文主要介绍了C++中运算符重载的基本知识。
4.5.1:加号运算符重载(成员函数和全局函数都可实现)
运算符重载:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
1:成员函数重载+号,this指针指向的是+号左侧的对象
本质:Person p3 = p1.operator+(&p2);
想用引用作为函数的返回值就要先在堆区开辟内存,栈区的局部变量会在函数执行完之后释放
2:全局函数实现运算符重载
本质: Person p3 = operator+(p1, p2);
operator+函数可以实现重载,创建一个就只有类名和Person不同的Human类,同时通过全局函数来实现运算符重载,这是编译器会根据operator+()函数参数的不同来选择使用那一个函数
根据参数不同选择不同的重载函数,即运算符重载也可以发生函数重载
对于内置的数据类型的表达式的运算符是不能改变的
4.5.2:左移运算符重载(全局函数实现)
重载左移运算符可以实现自定义数据类型的输出
左移运算符如果使用成员函数进行重载会出现的问题
void operator<<(cout)会简化成 p << cout,p是一个对象
cout是输出流ostream的一个对象
当operator<<重载函数的返回值是void类型时
但是如果想要在cout << p后面再使用<<就会报错了,因为没有用到链式的原则
当operator<<重载函数的返回值是ostream&类型时,就可以像普通的使用cout那样使用,也用到了函数重载的原理
4.5.3:++递增运算符重载
1:前置递增
结合友元、<<运算符重载,可以实现前缀++重载的效果
假如对myint执行两次++的操作,且将operator++的返回类型改成MyInt,而不是引用,那么会新构建一个对象,并对新对象进行操作
使用引用&的目的是为了一直对一个对象进行操作,改成引用&输出结果就是想要的了
2:后置递增(为了和前置++区分,要使用到函数的占位参数)
后置++使用值返回或者引用返回两种情况
引用返回:
值返回:
4.5.4:赋值运算符重载
如果使用默认的=运算符进行一些对象的赋值,可能会出现一些浅拷贝直接值赋值的问题
如果重写析构函数进行delete,就会出现内存多次释放的问题
进行赋值运算符重载
4.5.5:关系运算符重载
这里重新实现>运算符
改成引用之后再进行参数传入就不会创建一个新的对象,也就不会出现多次delete内存的情况
4.5.6:函数调用运算符()重载,仿函数、匿名对象
1:仿一个返回值是void,参数是string的()
2:仿一个返回值为int,入口参数(int,int)
总结
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666445.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!