个人主页:平行线也会相交
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 平行线也会相交 原创
收录于专栏【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 thisthis指针自身是不可更改的,但是其指向的内容可以更改。


修改方式如下:

void Print()const{cout << _year << "-" << _month << "-" << _day << endl;}

成员函数后面加上const之后,普通对象(权限缩小)和const对象(权限平移)都可以进行调用。const修饰的是this
但是并不是所有的成员函数都要加上const。那么什么场景下我们我们要加上const呢?

要修改对象成员函数的对象不能加const。就比如说+=-=的赋值重载运算符成员函数。因为我们加上const修饰对象时,this指针指向的内容不可以修改。
所以只要我们不修改成员变量的话都是可以加上const。

再来举个例子,请看:

总结
并不是所有成员函数后面都可以加const,因为对于想要修改对象成员变量的函数是不可以加const的。 同时,只要成员函数内部不修改成员变量,都应该加const,这样的话const对象和普通对象就都可以进行调用了。

好了,以上就是【C++】类和对象(中)的最后一部分内容,【C++】类和对象(中)主要讲解了六个默认成员函数的内容。其中最重要的就是前四个默认成员函数:构造函数析构函数拷贝构造函数赋值运算符重载函数

就到这里啦,再见各位!!!