this指针
-
this指针的类型:类类型* const。不能被修改和赋值。
-
只能在成员函数的内部使用。全局函数、静态函数都不能使用this.
-
this指针本质上其实是一个成员函数的形参(栈),是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
-
this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递。
-
this在成员函数的开始前构造,在成员函数的结束后清除
6.this指针并不是对象一部分,不影响sizeof 结果,它的作用域一般在类成员函数内部。
成员函数如何区分调用它的对象-使用隐藏的this指针
1、对象的内存只存储了成员变量,没有存储成员函数指针,相当于所有的对象调用的是同一份成员函数
2、当对象调用成员函数时,编译器会自动把对象的地址传递给该成员函数,也能就是说,普通成员函数都有一个隐藏的参数,该参数名字叫做this指针 ,this指针用来接收调用对象的地址
3、this指针拿到调用对象的地址后可以直接访问该对象的成员,从而完成区分对象的任务
4、虽然this指针是隐藏定义的,但是可以显示地使用它,但不要多此一举地显示定义它
常函数
1、被const修饰了this指针的成员函数,称为常函数(只能访问)
2、当对象调用成员函数时,编译器会隐式地把对象地址传递给成员函数
3、当对象被const修饰过具有常属性,就不能直接调用普通的成员函数,因为传递的对象地址也具有了常属性,而普通成员函数的this指针参数不具备常属性,所以编译器会报错,C++编译器不允许用带常属性的指针数据给不带常属性的变量赋值
4、因此需要让成员函数中的this也具备常属性,通过const修饰变成常函数,所以const修饰的是this指针,这样就可以让具有常属性的对象调用常函数
返回值 类名:: 成员函数(参数列表)const
{
//常函数
}
5、具有常属性的对象只能调用常函数,常函数也只能调用常函数;不具备常属性的对象都可以调用
6、同名的成员函数,如果其他的参数列表完全相同,但是属性不同,也可以构成重载
7、正常来说在常函数中不能修改成员变量,除非该成员在定义时通过mutable修饰
标签:调用,函数,对象,成员,C++,属性,指针 From: https://www.cnblogs.com/ljf-0804/p/17655041.html