C++(运算符重载)
运算符重载
为什么要有运算符重载?
如果没有重载运算符,类的对象不能进行运算符操作
本质是函数重载,函数名是以运算符的形式类命名,调用函数也是通过运算符来调用。
p + p1; 左值调用运算符,运算符右侧为传进去的参数
定义
(1)给运算符赋予新的含义,在类的内部定义的运算符重载和成员函数是一样的
(2)重载方法:定义一个重载运算符的函数,在需要执行被重载的运算符时,系统会自动调用
函数类型 operator 运算符名称(参数列表);
bool operator ==(const Person &s);
this是运算符的左值,参数是运算符的右值
重载赋值运算符
C++会对每个类默认重载赋值运算符,默认的逻辑是成员变量逐个赋值
、
结论:
(1)用一个已经存在的对象给一个新的对象初始化,调用拷贝构造函数
(2)两个都是已经存在的对象,调用赋值运算符重载函数
系统默认的赋值运算符
总结
(1)必须重载和默认赋值运算符相同类型的参数(对象的引用),才能覆盖掉默认的赋值运算符;
(2)自己重载了,系统的重载是否还在?
系统的还在,因为我们重载的赋值运算符的参数和C++默认生成的不一样,所以不会覆盖掉默认赋值运算符的重载
(3)赋值运算符是算浅拷贝,没有特殊需求,是不用覆盖系统默认的
C++中默认存在的函数
++运算符重载
重载输出运算符<<
#include <iostream>
using namespace std;
class Person
{
//istream 输入流 ostream 输出流
friend ostream &operator << (ostream &os, const Person &ob);
public:
Person(int age):age(age){}
private:
int age;
};
//必须是全局的
ostream &operator << (ostream &os, const Person &ob)
{
os << ob.age;//私有的变量,要加友元
return os;
}
int main(){
Person per1(14);
Person per2(18);
cout << per1 << " " << per2 << endl;
return 0;
}