this是C++中的一个关键字,也是一个const指针,它指向当前对象,通过它可以访问当前对象的所有成员。下面是小编为大家整理的C++this指针详解,欢迎参考~
所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu就是当前对象,this就指向stu。
下面是使用this的一个完整示例:
#include
usingnamespacestd;
classStudent{
public:
voidsetname(char*name);
voidsetage(intage);
voidsetscore(floatscore);
voidshow();
private:
char*name;
intage;
floatscore;
};
voidStudent::setname(char*name){
this->name=name;
}
voidStudent::setage(intage){
this->age=age;
}
voidStudent::setscore(floatscore){
this->score=score;
}
voidStudent::show(){
cout<
}
intmain(){
Student*pstu=newStudent;
pstu->setname("李华");
pstu->setage(16);
pstu->setscore(96.5);
pstu->show();
return0;
}
运行结果:
李华的年龄是16,成绩是96.5
this只能用在类的内部,通过this可以访问类的所有成员,包括private、protected、public属*的。
本例中成员函数的参数和成员变量重名,只能通过this区分。以成员函数setname(char*name)为例,它的形参是name,和成员变量name重名,如果写作name=name;这样的语句,就是给形参name赋值,而不是给成员变量name赋值。而写作this->name=name;后,=左边的name就是成员变量,右边的name就是形参,一目了然。
注意,this是一个指针,要用->来访问成员变量或成员函数。
this虽然用在类的内部,但是只有在对象被创建以后才会给this赋值,并且这个赋值的过程是编译器自动完成的,不需要用户干预,用户也不能显式地给this赋值。本例中,this的值和pstu的值是相同的。
我们不妨来*一下,给Student类添加一个成员函数printThis(),专门用来输出this的值,如下所示:
voidStudent::printThis(){
cout<<this<<endl;
}
然后在main()函数中创建对象并调用printThis():
Student*pstu1=newStudent;
pstu1->printThis();
cout<<pstu1<<endl;
Student*pstu2=newStudent;
pstu2->printThis();
cout<<pstu2<<endl;
运行结果:
0x7b17d8
0x7b17d8
0x7b17f0
0x7b17f0
可以发现,this确实指向了当前对象,而且对于不同的对象,this的值也不一样。
几点注意:
this是const指针,它的值是不能被修改的,一切企图修改该指针的*作,如赋值、递增、递减等都是不允许的。
this只能在成员函数内部使用,用在其他地方没有意义,也是非法的。
只有当对象被创建后this才有意义,因此不能在static成员函数中使用(后续会讲到static成员)。
this到底是什么
this实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给this。不过this这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
this作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给this赋值。
[C++this指针详解]相关文章:
因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。下面是小编为大家整理的C语言之复杂指针详解,...
往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。一、指针函数当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。格式:类型说明符*函...
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以*作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。像数组、字符串、动态...
析构函数在删除month指针时,可能会出现一些问题。当然从这个程序本身来看,没什么麻烦;但是从设计一个类的角度来看,当date类用于赋值时,就会出现问题。下面是小编为大家带来的关于析构函数和this指针的知识,欢迎阅读。一、析构函数前面的一...
大家知道C语言的指针有哪些类型吗?下面小编为大家整理了C语言的指针类型解析,希望能帮到大家!指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就...
公司试用期员工个人辞职报告10-27
巧克力中的知识的数学日记10-12
小读者教案设计06-12
我得到了关心小学作文700字09-04
太阳终于回家了小学生作文01-25
富有营养的红烧胡萝卜做法06-28
游竞秀公园叙事作文05-21
如何与讨厌的人共事08-09
寻找心底里的善良作文08-12
假如我会变的三年级作文250字09-13
运动会100米加油稿「精选」09-14
本杰明巴顿经典台词09-24
有美堂暴雨02-22
小英雄雨来的故事02-23
销售员试用期工作总结02-23
闻鹊喜·吴山观涛02-24