主要内容:运算符重载和const成员函数
2024.08.24
- 运算符重载
operator + 运算符
原本可以用函数解决的,替换成运算符重载,提高了可读性
注:
1. 不能通过连接其他符号来创建新的操作符:比如operator@
2. 重载操作符必须有一个内置类型参数
3. 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不能改变其含义
4. 作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this
5. .* :: sizeof ?: . 注意以上5个运算符不能重载。这个经常在笔试选择题中出现
6. 不能改变操作符的操作数个数。一个操作符是几个操作数,那么重载的时候就有几个参数
比大小运算符重载,可以先写< 和 ==,剩下的运算符都可以复用 - 赋值重载函数
拷贝构造与赋值重载
2024.08.25
- ++运算符重载和运算符++
Date d;
d++; // Date operator++(int);
编译器会将d++转化为d.operator++(0);
++d; // Date& operator++();
编译器会将++d转化为d.operator++();
前置++运算符重载参数里没有int,且返回类型为Date引用,因为d生命周期还没结束
而后置++参数里有int,为了和前置++区别,加了个int参数,返回类型为Date,因为后置++里需要一个tmp对象接收*this,不能引用返回,只能传值返回
2024.08.26
- const成员函数
void Print() const; //在函数最后加一个const
缺省参数处可以调用函数
class SeqList
{
private:
int* _a;
size_t _size;
size_t _capacity;
}
const SeqList s;
不能修改的是_size, _capacity和_a这个指针,而不是指针所指向的值。也就是说const修饰的是int* const _a而不是const int* _a;
const变量在初始化的时候是可以调用构造函数的,并且构造函数不可以是const成员函数, - 取地址运算符重载
日常自动生成的就可以
不想被取到有效地址可以自己写取地址运算符重载 - << 与 >> 运算符重载
友元函数
<<重载函数的返回值
cout相对于printf的优势