目录
三、类和对象(中)
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) const void 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 ; // ⽇ };