个人主页:平行线也会相交💪
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【C++之路】💌
本专栏旨在记录C++的学习路线,望对大家有所帮助🙇
希望我们一起努力、成长,共同进步。🍓
目录
- 前言
- 取地址及const取地址操作符重载
- const成员函数的使用
前言
今天是521,先祝各位玩的开心哈!!!
前面已经更新过了C++类和对象中的前四个默认成员函数:分别是构造函数
、析构函数
、拷贝构造函数
、赋值运算符重载函数
。
今天主要是把剩下的两个默认成员函数(取地址及const取地址操作符重载
)更新完,同时讲解一下const成员函数
的使用。
取地址及const取地址操作符重载
这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
我们知道内置类型是可以直接使用相关的运算符的,但是自定义类型如果要使用运算符的话是需要进行重载的,因为自定义类型是不可以直接使用相关的运算符的。
#include<iostream>
using 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
进行&操作
就是因为编译器自动生成了一个取地址操作符重载
,当然我们也可以自己写,请看:
#include<iostream>
using 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++】类和对象(中)主要讲解了六个默认成员函数的内容。其中最重要的就是前四个默认成员函数:构造函数
、析构函数
、拷贝构造函数
、赋值运算符重载函数
。
就到这里啦,再见各位!!!