目录
三、类和对象(中)
6、取地址运算符重载
1、const成员函数
2、取地址运算符的重载
三、类和对象(中)
6、取地址运算符重载
1、const成员函数
- 将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后面。
- const实际修饰该成员函数隐含的this指针指向的对象,表明在该成员函数中不能对类的任何成员进行修改。没有修改的话就可以加,修改的话就不可以加const。
- const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const Date* const this
#include<iostream> using namespace std; class Date { public:Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}//若不加上const,则为void Print(Date* const this),this指针中的const修饰的是指针不能被改变// void Print(const Date* const this) constvoid Print() const{cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day; };int main() {// 这⾥⾮const对象也可以调⽤const成员函数是⼀种权限的缩⼩Date d1(2024, 7, 5);//&d -> Date*d1.Print();const Date d2(2024, 8, 5);//&d -> const Date*d2.Print();return 0; }
总结:一个成员函数,不修改成员变量的建议都加上。
更多详细例子可以去看博主的C++_类与对象(中篇)的日期类实现中的const修饰:C++_类和对象(中篇)—— 运算符重载、赋值运算符重载、日期类实现-CSDN博客
2、取地址运算符的重载
- 取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载。
- ⼀般这两个函数编译器自动生成的就可以够我们用了,不需要去显示实现。
- 除非⼀些很特殊的场景,比如我们不想让别人取到当前类对象的地址,就可以自己实现⼀份,胡乱返回⼀个地址。
class Date { public :Date* operator&(){return this;// return nullptr;}const Date* operator&()const{return this;// return nullptr;}private :int _year ; // 年int _month ; // ⽉int _day ; // ⽇ };
