目录
5.1用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝
5、赋值运算符重载(继)
5.1用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝
注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。
编译器生成的默认赋值运算符重载函数已经可以完成字节序的值拷贝了
,还需要自己实现吗?当然像日期类这样的类是没必要的,但对于Stack类等涉及资源管理就必须要实现(这里跟拷贝构造类似)
5.2前置++和后置++重载
class Date
{
public:
Date(int year = 1, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
// 前置++:返回+1之后的结果
Date& operator++()
{
_day += 1;
return *this;
}
// 后置++:返回+1之前的结果
// 为了与前置++区分开,参数中写个int,调用函数时参数不用传递
Date operator++(int)
{
Date temp = *this;
_day += 1;
return temp;
}
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1(2024, 5, 8);
Date d2 = d1;
(d1++).Print();
(++d2).Print();
return 0;
}
6.const成员
将
const
修饰的
“
成员函数
”
称之为
const
成员函数
,
const
修饰类成员函数,实际修饰该成员函数
隐含的
this
指针
,表明在该成员函数中
不能对类的任何成员进行修改。
const对象不可以调用非const成员函数
非const对象可以调用const成员函数
7.取地址及const取地址操作符重载
这两个默认成员函数一般不用重新定义
,编译器默认会生成
。
这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需
要重载,比如
想让别人获取到指定的内容!