C++this指针

这篇具有很好参考价值的文章主要介绍了C++this指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文旨在讲解C++中this关键字,以及其相关作用!


定义

this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。


this的介绍

下面来看一下关于this这个关键字的实例!

class Data
{
private:
    int _year;
    int _month;
    int _day;
public:
    void Init(int year,int month,int day)
    {

        cout << "this的地址"<<this << endl;
        _year = year;
        _month = month;
        _day = day;
    }
}
int main()
{
    Data D1;
    Data D2;
    cout <<"D1的地址:"<< & D1 << endl;
    cout <<"D2的地址:"<< & D2 << endl;
    D1.Init(2013,11,15);
    D2.Init(2013, 11, 16);
}

通过观察上述代码,在main函数内部里,当使用Init函数时,并没有对Init函数进行传相应类的参数,那么编译器是如何将其正确赋值给相应的类呢?

这时就引出了C++的关键字this!编译器通过this关键字来自动匹配传递的参数!下面来看一下msdn中关于对this关键字的简单介绍!

C++this指针,c++,开发语言,c语言,学习方法

简单介绍一下上述的意思,“this”指针仅仅存在于class,struct,union类型,它指向成员功能调用的目标,静态变量没有this这个指针!


this指针内部详细介绍!

通过下面代码,可以对this指针会有更深一步的认识!

class Data
{
private:
    int _year;
    int _month;
    int _day;
public:
    void Init(int year,int month,int day)
    {

        //this在实参和形参的位置不能显写,但是在类中变量可以显写!
        //this = nullptr;
        //通过在类中对this的操作,可以证明this指针确实存在!
        cout << "this的地址"<<this << endl;
       /* this->*/_year = year;
        /*this->*/_month = month;
        _day = day;
    }
    void print()
    {
        cout << _year << "-";
        cout << _month << "-";
        cout << _day;
        cout << endl;
    }
};

int main()
{
    Data D1;
    Data D2;

    //通过观察D1,D2的地址,可以看出D1中的this的地址和D1的地址相同,可以推出this指针实际上是指向类的地址的指针的!
    cout <<"D1的地址:"<< & D1 << endl;
    cout <<"D2的地址:"<< & D2 << endl;
    D1.Init(2013,11,15);
    D2.Init(2013, 11, 16);
    D1.print();
    D2.print();
}

上述代码运行调试过后结果入下:

C++this指针,c++,开发语言,c语言,学习方法

通过上述调试的结果,可以更深了解this指针!


this指针的特性

1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

上实例当对this指针赋予nullptr时,编译器会报错,错误信息入下:

C++this指针,c++,开发语言,c语言,学习方法

C++this指针,c++,开发语言,c语言,学习方法

2. 只能在“成员函数”的内部使用。

3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给

this形参。所以对象中不存储this指针。(可以通过对类的大小来判断类中是否存在了this指针!

4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传

递,不需要用户传递。


this到底是什么

this 实际上是成员函数的一个形参在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。


至此,关于this指针的介绍结束,若还有其他特性,欢迎读者来进行补充,也欢迎各位指出不足!

C++this指针,c++,开发语言,c语言,学习方法文章来源地址https://www.toymoban.com/news/detail-705887.html

到了这里,关于C++this指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 问题:以下选项中,( )是不正确的C语言字符型常量. #学习方法#媒体

    问题:以下选项中,( )是不正确的C语言字符型常量. A、\\\"a\\\" B、\\\'101\\\' C、\\\'x4l\\\' D、\\\'a\\\' 参考答案如图所示

    2024年02月20日
    浏览(27)
  • c语言实现this指针效果

    由于目前在做一个比较复杂的嵌入式项目,想要借此提升一下代码的结构设计能力,所以想要以 面向对象 的思想来完成这个项目,即把每个板载外设资源视为一个对象,采用 msp+bsp 的模式,对每个bsp外设实现对象化处理,现有方案需要手动传入对象引用,调用方法时比较麻

    2024年02月05日
    浏览(38)
  • 【生态经济学】R语言机器学习方法在生态经济学领域中的实践技术

    查看原文基于R语言机器学习方法在生态经济学领域中的实践技术 近年来,人工智能领域已经取得突破性进展,对经济社会各个领域都产生了重大影响,结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一,目前也在飞快的融入计量经济学研究。表面

    2024年02月10日
    浏览(30)
  • 【机器学习】R语言实现随机森林、支持向量机、决策树多方法二分类模型

    暑期简单学习了机器学习理论知识,当时跟着B站咕泡老师学的,内容讲得蛮详细,实例代码、资料都比较全面,但是学校Python课程开设在这学期,所以用Python进行数据分析、建模等不是很熟悉,所以决定用之前学过的R语言来实现机器学习。R语言的相关包也都比较完善,所以

    2024年02月04日
    浏览(33)
  • 基于R语言Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合方法与应用

     Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。R语言拥有完整有效的数据处理、统计分析

    2024年02月16日
    浏览(28)
  • 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用

    查看原文 【案例教程】基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用 Meta分析 是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循

    2024年02月07日
    浏览(42)
  • unity-VRTK-simulator开发学习日记2(抛物线 导包|使用|调用方法)

    曲线上面那个是直线 (选择哪只手射出射线) 找到模拟手柄按键 找到simulator的交互的几个按键(ButtonOne为例) value,默认值为false,不触发,按下后为true,触发。 触发方式为mouse0,即鼠标左键。    将该按钮ButtonOne给到抛物线的激活方式。   active  激活时调用 deactive  非

    2024年02月03日
    浏览(64)
  • c++ 学习 之 this 指针的学习

    在c++ 中类内成员变量和成员函数分开存储 每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会公用一块代码 那么问题来了,这一块代码是如何区分哪个对象调用自己呢? c++ 通过提供特殊的对象指针,this指针,解决上述问题, his指针指向被调用的成

    2024年02月08日
    浏览(25)
  • 数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)

    目录 题目描述 输入示例 输出示例 解题思路  解题方法(C语言) 解析 有序的二叉树遍历可以用堆栈以非递归的方式实现。 例如: 假设遍历一个节点数为6的二叉树(节点数据分别为1到6)时, 堆栈操作为:push(1);push(2);push(3);pop();pop();push(4);pop()

    2024年02月07日
    浏览(36)
  • 【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(7)特征工程的基本方法

    今天来学习特征工程的基本方法。 基本方法包括:特征选择(Feature Selection)、特征提取(Feature Extraction)和特征构建(Feature Construction)。 从给定的特征集合中选出相关特征子集的过程。 去除无关特征,降低特征学习难度,让模型简单,降低计算复杂度。 抛弃这部分特征

    2024年02月22日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包