C++ this指针详解

this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。下面是小编为大家整理的C++ this指针详解,欢迎参考~

C++ this指针详解

所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu 就是当前对象,this 就指向 stu。

下面是使用 this 的一个完整示例:

#include

using namespace std;

class Student{

public:

void setname(char *name);

void setage(int age);

void setscore(float score);

void show();

private:

char *name;

int age;

float score;

};

void Student::setname(char *name){

this->name = name;

}

void Student::setage(int age){

this->age = age;

}

void Student::setscore(float score){

this->score = score;

}

void Student::show(){

cout

}

int main(){

Student *pstu = new Student;

pstu -> setname("李华");

pstu -> setage(16);

pstu -> setscore(96.5);

pstu -> show();

return 0;

}

运行结果:

李华的年龄是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 的值,如下所示:

void Student::printThis(){

cout<

}

然后在 main() 函数中创建对象并调用 printThis():

Student *pstu1 = new Student;

pstu1 -> printThis();

cout<

Student *pstu2 = new Student;

pstu2 -> printThis();

cout<

运行结果:

0x7b17d8

0x7b17d8

0x7b17f0

0x7b17f0

可以发现,this 确实指向了当前对象,而且对于不同的对象,this 的值也不一样。

几点注意:

this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的。

this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的。

只有当对象被创建后this 才有意义,因此不能在 static 成员函数中使用(后续会讲到 static 成员)。

this 到底是什么

this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。

this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。

c 语言中的this指针,C++ this指针详解相关推荐

  1. c语言 recv_sin,C++_C语言中经socket接收数据的相关函数详解,recv()函数: 头文件:#incl - phpStudy...

    C语言中经socket接收数据的相关函数详解 recv()函数:头文件: #include #include 定义函数: int recv(int s, void *buf, int len, uns ...

  2. 计算机汇编指令mov和mova,汇编语言中mov和lea指令的区别详解

    指令(instruction)是一种语句,它在程序汇编编译时变得可执行.汇编器将指令翻译为机器语言字节,并且在运行时由 CPU 加载和执行. 一条指令有四个组成部分: 标号(可选) 指令助记符(必需) ...

  3. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  4. c语言 access编程,C语言中access/_access函数的使用实例详解

    在Linux下,access函数的声明在文件中,声明如下: int access(const char *pathname, int mode); access函数用来判断指定的文件或目录是否存在(F ...

  5. php语言中Excel表格导入数据库的方法详解

    在php编程语言中,对于如何在Excel表格中导入数据库的方法是很多编程者比较头疼的一个问题,有些技术人员可能在百度尝试过搜索很多不同的问题,但是给出的答案经过自己测试之后,发现还是行不通,那么对此, ...

  6. c语言switch case缩进,C语言中的switchnbsp;casenbsp;语句的用法详解

    本文就几个实例来说明Switch case 语句的用法. 说是C语言中的Switch case,其实和html+javascript中的Switch case语法是基本一样的哦. 问题: 有这么一个C ...

  7. c语言中的creat()函数使用及参数详解

    头文件:#include <sys/types.h>   #include <sys/stat.h>   #include <fcntl.h> #include & ...

  8. python语言中param_四、python之函数详解一

    一.函数 1.说白了就是把一组代码合到一起,可以实现某种功能,需要再用到这种功能的话,直接调用这个函数就行 2.函数.方法是一回事 3.定义一个函数的格式是:def+函数名+() 4.函数必须调用了之 ...

  9. 在c语言中make的用法,cmake使用方法详解

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...

  10. 函数指针与回调函数详解

    函数指针与回调函数详解 1.什么是函数指针? 函数(的)指针就是指针.这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址.这类似于数组名就是数组的首地址.我们可以通过反汇编直观的查看到函数 ...

最新文章

  1. linux swap 内存交换分区调整
  2. 如何在MFC线程中使用控件的成员变量和函数
  3. Redis中的客户端重定向
  4. 学成在线--11.RabbitMQ快速入门
  5. 设计模式-里氏替换原则
  6. 让计划任务生成的文件中包含当前日期
  7. python中df head_解决Python spyder显示不全df列和行的问题
  8. fer2013人脸表情数据实践
  9. 手机利用NFC功能复制门禁卡到小米手环上
  10. 微信打飞机--Java版
  11. 全网最全-Java简历优化-优质项目经历
  12. MATLAB 信号处理仿真入门实验
  13. 配置防火墙规则实现 WSL2 访问 Windows 主机服务
  14. word中 插入公式及交叉引用
  15. 小程序加载不出来图片
  16. VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群详细教程(亲测有效,※吐血推荐※)(内含快速启动容器脚本)
  17. 手把手教你用docker 搭建zoolkepper 和 dubbo 的测试环境
  18. 函数的递归调用(C++)
  19. 秉火429笔记之十一 Systick--滴答定时器
  20. 关于Windows安装解压版MySQL出现服务正在启动-服务无法启动的问题

热门文章

  1. PS MAC 2022安装步骤
  2. python pyplot 宽高等比_python – 更改matplotlib中子图的宽高比
  3. 微信网页授权本地调试
  4. 在reader中勾选pdf复选框_Excel中设计具有可任意勾选复选框的操作方法
  5. 设计模式(博客园精化集)
  6. Win10怎么合并磁盘分区 合并磁盘的操作方法
  7. 类似中国知网但是搜索英文文献的权威网站有哪些?
  8. matlab求解多元函数的偏导数diff
  9. 开发微信小程序需要服务器吗?
  10. void* LPVOID是些什么东东