IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++this指针概要 -> 正文阅读

[C++知识库]C++this指针概要

C++this指针概要


前言

今天只有一个内容,这是C++中最最最最重要的知识点的其中之一,希望我可以说的明白,可以让大家有所收获

一、引出this指针

我们先些一小段代码,在其中来找到我们需要学习的东西

class Date
{ 
public :
 void Display ()
 {
 cout <<_year<< "-" <<_month << "-"<< _day <<endl;
 }
 
 void SetDate(int year , int month , int day)
 {
 _year = year;
 _month = month;
 _day = day;
 }
private :
 int _year ; // 年
 int _month ; // 月
 int _day ; // 日
};
int main()
{
 Date d1, d2;
 d1.SetDate(2018,5,1);
 d2.SetDate(2018,7,1);
 d1.Display();
 d2.Display();
 return 0;
}

以上定义了一个日期类,在main中我们,实例化了两个对象,d1和d2。
那么,大家请思考一个问题,类内有一个函数SetDate,当d1去调用的时候,(2018,5,1)这几个数据,它是怎么写入d1对象自己的_year,_month,_day中的呢?由前面的类于对象介绍到,成员函数是储存在公共代码段中的,每个对象只保存了自己的成员变量,但是成员变量的命名都是相同的,函数又是如何识别的呢?

所以在C++中引入了this指针来解决这个问题,这也是我们今天要讲的重中之重,它将贯穿整个C++的学习,以及大家自己所能达到的C++技术的高度。

二、 那么this指针是什么?

C++编译器给每个 非静态的成员函数 (以后会介绍静态和非静态的区别) 增加了一个 隐藏的指针参数让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

三、this指针的特性

  1. this指针的类型:类类型* const
  2. 只能在“成员函数”的内部使用
  3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
  4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

实际上的SetDate():

 void SetDate(int year , int month , int day)   //隐藏this指针
 {
 _year = year;
 _month = month;
 _day = day;
 }
  void SetDate(Date* const this, int year , int month , int day)   //显示this指针
 {
 this->_year = year;
 this->_month = month;
 this->_day = day;
 }

这样一看,是不是很明了,这里的this就是对象本身的一个指针,它指向了对象自己的成员变量,这样就可以确定数据保存的位置,谁调用,this就指向谁。

总结

this指针并不是在类内的每个函数中都存在,在友元函数和上面提到的静态函数中,其实都不会出现,但是现在还没有那些概念,等咱们的博客更新到那里的时候,博主会对这些知识点,进行完善和补充,谢谢大家。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:43:27  更:2021-12-28 22:44:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:30:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码