C++ this指针
来源:互联网 发布:原生js移除classname 编辑:程序博客网 时间:2024/06/06 19:22
一、this指针的理解
this指针是一个特殊的指针,指向一个类的具体实例,即一个类的对象。在类中,通过this指针可以访问类的成员变量及成员函数。但this指针并不是对象本身的一部分,不会影响sizeof()操作符的结果。
关于this指针有一个比较经典的举例:当你进去一个房间后,你能看到房子里的电视、冰箱和沙发,但是你却看不见整个房子了。同样的,对于一个类的实例来说,你可以看到他的成员变量,成员函数,而this指针则指向实例本身。
二、this指针的使用
1、this指针是一种特殊的指针变量,不能通过&this来获取this指针的地址。对于普通的指针变量,是用取地址符(&)是可以获取存储该指针变量的地址的,但是对于this指针,将提示:表达式必须是左值或者函数指示符。
2、this指针的作用域仅在类本身的内部,在类的外部this指针将不可访问。有人说,this指针是在类的成员函数的函数体内创建的,在成员函数开始执行前创建,在成员函数执行完成之后清除。也有人认为,this指针在整个类的内部应该都是一直可访问的。
3、当成员函数的参数名与类的成员变量名相同,而要使用该参数给类的成员变量赋值时,需要显示的使用this指针。如:
class TestClass{public:TestClass();~TestClass();public:void SetTest(int test){this->test = test;}private:int test;};上述代码的SetTest中,显示调用了this指针给成员变量test赋值。
4、类的成员函数的第一个参数通常是this指针。ugg在博客 深入探讨this指针中(http://blog.csdn.net/ugg/article/details/606396) 提到:如果参数是确定的,this通过ecx传递给被调用者,否则,this在所有参数之后压栈。即:如果类的成员函数是确定,那么this的存储位置应该在寄存器中,如果参数不是固定的,则this保存在栈中。
5、const 函数中变量不能修改的原因:
public:void SetTest (int test) const{this->test = test;}private:int test;上边的函数不能通过编译,系统将提示表达式必须是可修改的左值,原因在于,此时函数的定义等价于
<span style="white-space:pre"></span>void SetTest(const TestClass* this, int test){this->test = test;}由于this此时是一个指向const变量的指针,因此,该this指针指向的对象的内容不能改变(使用mutable声明的变量除外)。
- 【C/C++】this指针
- C++this指针、智能指针
- 【C++】this 指针
- C++this指针
- C++this指针
- C++this指针
- C++this指针
- C++this指针
- c++this指针
- C++this指针
- C++this指针
- C++this指针(二)
- C++-this指针
- c++this指针
- C++this指针
- C ++的this指针
- C++this指针详解
- C++this指针
- deep learning 资料汇总
- vi常用命令
- 全角英文和半角英文切换
- 华硕笔记本禁用触控板方法
- PHP大小写是否敏感问题的汇总
- C++ this指针
- php json_decode函数
- swift的控制语句
- 简单的WinInet编程
- 【学习笔记】大数阶乘
- arcengine栅格渲染(栅格重分类) IRasterClassifyColorRampRenderer
- VB+DX游戏编程教程 第二话:点的艺术
- HDU 5119 Happy Matt Friends 2014ACM/ICPC亚洲区北京站
- hdu 4038 Stone(贪心模拟)