前言 本文主要介绍了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) 总结 以上就是本文的全部内容,非常感谢你能看到这。