本篇内容介绍了“C++中的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中保存的地址
this指针的两种传参方式:
1.参数压栈:当成员函数的参数可变时,遵循_cdecl调用约定
2.ecx寄存器:当成员函数的参数固定时,这时遵循_thiscall调用约定。
当this指针为NULL时编译器可编译通过
class Ctest
{
public:
void Funtest()
{}
}
int main()
{
Ctest *p = NULL;
p->Funtest();
}
“C++中的this指针实例介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。