个人主页:平行线也会相交
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 平行线也会相交 原创
收录于专栏【C++之路】
本专栏旨在记录C++的学习路线,望对大家有所帮助
希望我们一起努力、成长,共同进步。
目录
- 前言
- 取地址及const取地址操作符重载
- const成员函数的使用
前言
今天是521,先祝各位玩的开心哈!!!
前面已经更新过了C++类和对象中的前四个默认成员函数:分别是构造函数
、析构函数
、拷贝构造函数
、赋值运算符重载函数
。
今天主要是把剩下的两个默认成员函数(取地址及const取地址操作符重载
)更新完,同时讲解一下const成员函数
的使用。
取地址及const取地址操作符重载
这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
我们知道内置类型是可以直接使用相关的运算符的,但是自定义类型如果要使用运算符的话是需要进行重载的,因为自定义类型是不可以直接使用相关的运算符的。
#includeusing namespace std;class Date{public:private:int _year;int _month;int _day;};int main(){Date da1;Date da2;cout << &da1 << endl;cout << &da2 << endl;return 0;}
这个地方之所以可以直接对对象da1和da2
进行&操作
就是因为编译器自动生成了一个取地址操作符重载
,当然我们也可以自己写,请看:
#includeusing namespace std;class Date{public:Date* operator&(){cout << "Date* operator&()" << endl;return this;}const Date* operator&()const{cout << "const Date* operator&()const" << endl;return this;}private:int _year = 23;int _month = 5;int _day = 21;};int main(){Date da1;const Date da2;cout << &da1 << endl;cout << &da2 << endl;return 0;}
//两个函数构成函数重载,只不过参数类型不同,参数分别是Date*、const Date*Date* operator&(){cout << "Date* operator&()" << endl;return this;}const Date* operator&()const{cout << "const Date* operator&()const" << endl;return this;}
什么场景下会使用取地址及const取地址操作符重载呢?
我不想让其他人取到的普通对象的地址,请看:
const成员函数的使用
什么是const成员函数?
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
这里要特别强调一下:
const
修饰的是成员函数中的*this
,而不是this
,即this指针指向的内容不可更改(如const Date* this),但是this指针自身是可以修改的
。Date* const this
中this指针
自身是不可更改的,但是其指向的内容可以更改。
修改方式如下:
void Print()const{cout << _year << "-" << _month << "-" << _day << endl;}
成员函数后面加上const之后,普通对象(权限缩小)和const对象(权限平移)都可以进行调用。const修饰的是this。
但是并不是所有的成员函数都要加上const。那么什么场景下我们我们要加上const呢?
要修改对象成员函数的对象不能加const
。就比如说+=
和-=的赋值重载运算符
成员函数。因为我们加上const修饰对象时,this指针指向的内容不可以修改。
所以只要我们不修改成员变量的话都是可以加上const。
再来举个例子,请看:
总结
:
并不是所有成员函数后面都可以加const
,因为对于想要修改对象成员变量的函数是不可以加const
的。 同时,只要成员函数内部不修改成员变量,都应该加const
,这样的话const对象和普通对象
就都可以进行调用了。
好了,以上就是【C++】类和对象(中)的最后一部分内容,【C++】类和对象(中)主要讲解了六个默认成员函数的内容。其中最重要的就是前四个默认成员函数:构造函数
、析构函数
、拷贝构造函数
、赋值运算符重载函数
。
就到这里啦,再见各位!!!