C++ this指针详解

发布时间:2022-07-06 21:18:07

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<name<<"的年龄是"<age<<",成绩是"<score<<endl;

}

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++ this指针详解还看了:
  • C语言之复杂指针详解

    因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。下面是小编为大家整理的C语言之复杂指针详解,...

  • C语言指针函数和函数指针详解

    往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。一、指针函数当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。格式:类型说明符*函...

  • C语言中指针变量作为函数参数详解

    在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以*作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。像数组、字符串、动态...

  • 计算机等级考试二级C++考点:析构函数和this指针

    析构函数在删除month指针时,可能会出现一些问题。当然从这个程序本身来看,没什么麻烦;但是从设计一个类的角度来看,当date类用于赋值时,就会出现问题。下面是小编为大家带来的关于析构函数和this指针的知识,欢迎阅读。一、析构函数前面的一...

  • C语言的指针类型解析

    大家知道C语言的指针有哪些类型吗?下面小编为大家整理了C语言的指针类型解析,希望能帮到大家!指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就...