运算符重载
C++ 为了增强代码的可读性引入了运算符重载 ,运算符重载是为了实现一些特殊的运算,比如对比两个日期的大小,用><是不能直接比较,为了使运算符满足我们特殊的要求,引入了运算符重载。什么是运算符重载?为了比较两个日期的大小,按照自己的要求写了一个比较函数,分别按照年月日进行比较,按照原来的方法,只能进行函数调用,但是使用C++的运算符重载就可以大大增加可读性,运算符重载之后,普通的运算符就相当于调用函数,简单的符号代表着更加复杂的含义。运算符重载其实就是运算符的重定义,按照自己的要求定制运算符,然后选一个常见的运算符来代表它。
运算符重载是具有特殊函数名(函数名是operator>)的函数 ,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 运算符重载函数: 返回类型+ operator +要重载的操作符(参数列表)
注意:
1.不能通过连接其他符号来创建新的操作符:比如operator@
2.重载操作符必须有一个类类型参数。
3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+ ,不 能改变其含义。
4.作为类成员函数重载时,其形参看起来比操作数数目少1 ,因为成员函数的第一个参数为隐藏的this指针。顺序不能换,第一个形参是第一个实参的this指针,第二个形参就是第二个实参
5. .* :: sizeof ?: . 注意以上5 个运算符不能重载。
6.不能改变操作符的操作数的个数,一个操作符原来是几个操作数,重载后也是几个参数
通过运算符重载,以下表达式就能表达出d1大于d2
d1>d2;//等价于d1.operator>(d2)
以我们想要的方式来定义运算符,这种方式大大增强了代码的可读性。
赋值重载函数
赋值重载:两个已经存在的对象进行拷贝
构造,析构,拷贝构造,赋值重载,都是默认成员函数,凡是涉及资源清理的类,都需要自己写拷贝构造和赋值重载,而且必须是深拷贝的。只有像myqueue这样的类里面都是自定义类型,不用写这些成员函数,每个成员都是调用各自的成员函数就行。真正比较重要的是自动调用,每个类对象都自动调用这些成员函数
const成员函数
const Date* this,const形参this指针,只能写到成员函数的后面
const对象调用函数的时候,只能传给const*this做形参的成员函数,因为权限不能放大
只读函数都可以在后面加const,就是内部不涉及修改类成员的都是只读
用途举例