C++ this指针与const成员函数
this指针
-
每个对象拥有一个this指针,通过this指针来访问自己的地址。
-
this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。
-
this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针
-
在普通成员函数中,this是一个指向非const对象的const指针(如类类型为Student,那么this就是Student *const类型的指针);
在const成员函数中,this指针是一个指向const对象的const指针(如类类型为Student,那么this就是const Student * const类型的指针) -
this指针在成员函数开始执行前构造,在成员函数执行结束后销毁。
const对象与const成员函数
- 在成员函数参数列表后面加上const修饰,表示函数内this指针是一个指向常量对象的指针,不能修改成员变量。
void Person::setName(string name) const
{
this->name = name;
} //错误,const成员函数不能修改成员变量
-
一个const成员函数如果以引用的形式返回*this,那么它的返回类型是常量引用
-
对于const对象或者const对象的引用和指针,对象内的成员变量是不能修改的,因此只能调用const成员函数,不会修改成员变量
对于非const对象,既可以调用const成员函数,也可以调用非const成员函数。
int Person::getId()const
{
return this->id;
}
string Person::getName()
{
return this->name;
}
const Person p(1,"yyy");
p.getId(); //正确,getId为const成员函数
p.getName(); //错误,p为const对象,不能调用非const成员函数
Person p1(2,"ddd");
p1.getId(); //正确,普通对象可以调用const成员函数
p1.getName(); //正确,普通对象可以调用非const成员函数