本文旨在讲解C++中this关键字,以及其相关作用!
定义
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
this的介绍
下面来看一下关于this这个关键字的实例!
class Data
{
private:
int _year;
int _month;
int _day;
public:
void Init(int year,int month,int day)
{
cout << "this的地址"<<this << endl;
_year = year;
_month = month;
_day = day;
}
}
int main()
{
Data D1;
Data D2;
cout <<"D1的地址:"<< & D1 << endl;
cout <<"D2的地址:"<< & D2 << endl;
D1.Init(2013,11,15);
D2.Init(2013, 11, 16);
}
通过观察上述代码,在main函数内部里,当使用Init函数时,并没有对Init函数进行传相应类的参数,那么编译器是如何将其正确赋值给相应的类呢?
这时就引出了C++的关键字this!编译器通过this关键字来自动匹配传递的参数!下面来看一下msdn中关于对this关键字的简单介绍!
简单介绍一下上述的意思,“this”指针仅仅存在于class,struct,union类型,它指向成员功能调用的目标,静态变量没有this这个指针!
this指针内部详细介绍!
通过下面代码,可以对this指针会有更深一步的认识!
class Data
{
private:
int _year;
int _month;
int _day;
public:
void Init(int year,int month,int day)
{
//this在实参和形参的位置不能显写,但是在类中变量可以显写!
//this = nullptr;
//通过在类中对this的操作,可以证明this指针确实存在!
cout << "this的地址"<<this << endl;
/* this->*/_year = year;
/*this->*/_month = month;
_day = day;
}
void print()
{
cout << _year << "-";
cout << _month << "-";
cout << _day;
cout << endl;
}
};
int main()
{
Data D1;
Data D2;
//通过观察D1,D2的地址,可以看出D1中的this的地址和D1的地址相同,可以推出this指针实际上是指向类的地址的指针的!
cout <<"D1的地址:"<< & D1 << endl;
cout <<"D2的地址:"<< & D2 << endl;
D1.Init(2013,11,15);
D2.Init(2013, 11, 16);
D1.print();
D2.print();
}
上述代码运行调试过后结果入下:
通过上述调试的结果,可以更深了解this指针!
this指针的特性
1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
上实例当对this指针赋予nullptr时,编译器会报错,错误信息入下:
2. 只能在“成员函数”的内部使用。
3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给
this形参。所以对象中不存储this指针。(可以通过对类的大小来判断类中是否存在了this指针!)
4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
递,不需要用户传递。
this到底是什么
this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。
至此,关于this指针的介绍结束,若还有其他特性,欢迎读者来进行补充,也欢迎各位指出不足!文章来源:https://www.toymoban.com/news/detail-705887.html
文章来源地址https://www.toymoban.com/news/detail-705887.html
到了这里,关于C++this指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!