YouTube视频链接

C++的this关键字

本文是ChernoP41视频的学习笔记。
  在C++中有一个关键字this,它可以访问成员函数。this是一个指向当前对象实例的指针,该方法属于这个对象实例。

class Entity
{public:int x, y;Entity(int x, int y)// 成员初始化列表:x(x), y(y) {} Entity(int x, int y)//参数x赋值给它自己{x = x;y = y;}};

  我们可以使用成员初始化列表,但如果想在方法内部写,这里的参数和类中的变量名一样,如果直接写x=x,那么只是让参数中的x赋值给它自己,也就是什么都不做。而我们真正想做的是引用这个类的x和y,this关键字可以让我们做到这一点。this关键字是指向当前对象的指针。

class Entity
{public:int x, y;Entity (int x, int y){Entity* e = this;//  //      Entity* const e = this;//      this=nullptr; 不能//   //      Entity*& const e = this;不能//      Entity* const& e = this;可以e->x = x;}Entity (int x, int y)//简单写法{this->x=x; //(*this).x=x;this->y=y;}
};

  这里的this是一个Entity类型的指针。也可以加上const,这时右边的this不允许把它重新赋值为别的什么。所以不能写成this=nullptr;,也不能把this赋值给这里的引用,实际上需要const的。现在想要赋值x,可以直接用e->x,更简单的写法是this->x=x;。

class Entity
{public:int x, y;Entity(int x, int y){this->x = x; this->y = y;}int GetX() const{const Entity* e = this;//Entity* e = this;错误}
};

  若我们想要写一个返回这些变量之一的函数,在函数后面加上const是非常常见的,因为它不会修改这个类。所以在GetX()函数中就不能将this赋值给一个Entity,而是const Entity。
  若我们想在Entity类的内部调用一个类外部的函数 PrintEntity,这个函数将Entity作为参数。我们想传递这个Entity类的当前实例到这个函数,就可以传入this,它会传入我们设置的x和y的当前实例。

void PrintEntity(Entity* e);
class Entity
{public:int x, y;Entity(int x, int y){this->x = x; this->y = y;PrintEntity(this);}
};
void PrintEntity(Entity* e)
{//print
}

  如果我们想把它作为一个常量引用const &,这里要做的就是逆向引用*。通过逆向引用this指针,在非const方法中,我们可以赋值给Entity &。如果在一个const方法中,我们可以将*this赋值给const Entity&,因为这是一个指向当前类的指针。我们还可以调用delete this(不建议)。

class Entity
{public:int x, y;Entity(int x, int y){this->x = x; this->y = y;Entity& e = *this;delete this;//非专业不建议使用}int GetX() const{const Entity& e = *this;}
};

Cherno C++ P41 C++的this关键字相关推荐

  1. [Cherno C++ 笔记 P1~P10]安装、链接器、变量、函数、头文件

    [Cherno C++ 笔记 P1~P10]安装.链接器.变量.函数.头文件 系列博客 前言 视频链接 P1~P4 安装部分 P5 C++是如何工作的 第一个C++程序 代码如何编译为二进制文件 第一 ...

  2. Cherno C++ P44 C++的复制与拷贝构造函数

    YouTube视频链接 C++的复制与拷贝构造函数 本文是ChernoP44视频的学习笔记.   看如下代码,a和b是两个独立的变量,它们有不同的内存地址,若将b=3则a仍然是2.在Vector2类中 ...

  3. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  4. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  5. volatile关键字之全面深度剖析

    引言 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字 ...

  6. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法

    本文实例讲述了PHP屏蔽过滤指定关键字的方法.分享给大家供大家参考.具体分析如下: 实现思路: 一.把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少. 二.PHP读取关键字文本,存入一 ...

  7. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  8. Java this 关键字使用

    this 引用就是本类的一个对象 理解这句话看下面一段代码 package me; public class Me {String name; //成员变量int age;public Me(Stri ...

  9. java 关键字(面试题)

    学而时习之,温故而知新. 今天群里有人问java中true ,false 是关键字吗, 这里记录下,不是关键字,我还特意翻看之前的书看看 下面是 Java 语言保留使用的 50 个关键字: 关键字 g ...

最新文章

  1. 研发项目进度管理软件正式上线
  2. 前端开发-4-HTML-tableform表单控制 标签
  3. 反射_Class对象功能_获取Field
  4. DataFrame/Series获取列名以及更改列名(转)
  5. SAP Commerce Cloud如何针对Spartacus进行安装
  6. 根据状态转移写状态机-三段式
  7. 实例17:python
  8. 《飞秋下载》介绍过的求伯君,看看!
  9. 前端开发 锚点链接 简单轮播图 0302
  10. Struts1——离BeanUtils看struts其原理1
  11. SDK窗口中增加菜单 以及 对菜单做出相应的消息响应
  12. 第三方网站调用微信公众号的图片被禁止
  13. 挑战程序设计竞赛 练习日记
  14. Word一行排列多个图片并插入题注
  15. 14个PLC入门基础知识
  16. python程序输出田字格_Python程序练习题5.1-输出更大的田字格。
  17. java Flink(二十二)Flink实战之电商用户访问量(uv独立访客数)统计 使用:利用set进行数据去重、自定义布隆过滤器,解决状态数据过大、内存过大的问题、使用trigger自定义窗口触发器
  18. Aquaculture Equipment 水产养殖设备谷歌Google搜索量和海外市场竞争度分析
  19. JavaSE - 14 枚举 + 注解
  20. linux系统查看串口占用,Linux 系统串口信息查看

热门文章

  1. 【微信小程序】组件之页面布局
  2. CSS笔记(CSS禅意花园+CSS揭秘)
  3. 为什么我选择并且推崇用ROS开发机器人
  4. kubectl插件管理器krew
  5. 使用windows引导的ubuntu双操作系统
  6. 自己做量化交易软件(31)小白量化实战5--板块股票池与基本面选股
  7. 第五章 彩色图像处理
  8. qbo julius增加自己的grammar方法
  9. 【计算机网络】笔记及考点
  10. 乳腺癌组织病理图像分类