• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++ 中的this指针详解及实例

c++ 搞代码 4年前 (2022-01-06) 34次浏览 已收录 0个评论

这篇文章主要介绍了C++ 中的this指针详解及实例的相关资料,this指针是类的一个自动生成、自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对象。需要的朋友可以参考下

C++ this 指针详解

学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。

正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。

this指针是类的一个自动生成、自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对象。

全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。

 class Ctest { public: void Funtest(int iValue) { _iValue = iValue; } void Print() { cout << _iValue << endl; } private: int _iValue;//调用私有变量只能用公有成员接收,成员变量在类中具有全局作用域 }; int main() { Ctest test; test.Funtest(30); test.Print(); system("pause\n"); return 0; } 

我们来观察对Funtest函数的调用,test.Funtest(),在这里,我们运用了点运算符来访问test对象的Funtest成员,然后调用它。

当我们调用某个成员函数时,实际上是在替某个对象调用它。如果Funtest指向Ctest的成员(例如iValue),则它隐式地指向调用该函数的对象的成员。

成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象。当我们调用那个函数时,用请求该函数的对象地址初始化this.例如:如果调用

test.Funtest(),则编译器负责把test的地址传递给Funtest的隐式形参this。可以等价的认为编译器将该调用重写成了如下形式:

 //此处只用于说明调用成员函数实际执行过程 Ctest::Funtest(&test)

在成员函数内部,我们可以直接使用调用该函数的成员,而无需通过成员访问运算符来做到,因为this指针所指的正是这个对象。任何对类成员的直接访问都 被看做是this指针的隐式引用,上面的程序可认为是this->iValue.

this形参是隐式定义的,实际上,任何自定义名为this的参数或变量的行为都是非法的.所以,Funtest函数的定义相当于是

 void Funtest(Ctest *const this,int *iVlue) { this->_iValue = iValue; } 

this是一个常量指针,不允许改变this中保存的地址

thi

来源gaodai^.ma#com搞#代!码网

s指针的两种传参方式:

1.参数压栈:当成员函数的参数可变时,遵循_cdecl调用约定
2.ecx寄存器:当成员函数的参数固定时,这时遵循_thiscall调用约定。

当this指针为NULL时编译器可编译通过

 class Ctest { public: void Funtest() {} } int main() { Ctest *p = NULL; p->Funtest(); } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上就是C++ 中的this指针详解及实例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++ 中的this指针详解及实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址