运算符重载的引入
C++为了增加代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数
(也具有其返回值类型,函数名字,参数列表,其返回值类型与参数列表与普通的函数类似)
函数名字:关键字operator后面接需要重载的运算符符号
函数原型:返回值类型operator操作符(参数列表)
注意:
1.不能通过连接其他符号来创建新的操作符(比如operator@就是不合法的)
2.重载运算符必须有一个类类型参数
3.用于内置类型的运算符,其含义不能改变(例如int的+,其含义就不能改变)
4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this
5. .* :: sizeof ?: . 以上这五个运算符不能重载
赋值运算符重载
1.格式:
>>参数类型:const T& 传递引用可以提高传递效率
>>返回值类型:T& 返回引用可以提高返回的效率,有返回值的目的是为了支持连续赋值
>>函数内需判断是否自己给自己赋值
>>返回*this,要满足连续赋值的含义
2.赋值运算符只能重载成类的成员函数,不能重载成全局函数
(原因:如果赋值运算符不显式实现,编译器会生成一个默认的,此时用户自己又在类外自己实现一个运算符重载,就和编译器中生成的默认赋值运算符重载冲突了。故赋值运算符重载只能是类的成员函数)
3.用户没有显式实现时,编译器会生成一个默认运算符重载,以值的方式逐字节拷贝
(注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载,来完成赋值)
4.如果类中未涉及到资源管理,赋值运算符重载是否实现都可以。一旦涉及到资源管理则必须要实现。
前置++与后置++重载
后置++在重载时比前置++多一个int类型的参数,调用函数时该参数不需要传递,编译器自动传递
后置++重载函数返回值为旧值,因为是先使用再++