欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    C++ this指针的理解和作用.docx

    • 资源ID:1091813       资源大小:42.65KB        全文页数:7页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++ this指针的理解和作用.docx

    this指针概念在C+中,this指针是一个指向当前对象的指针。它是一个隐式参数,在成员函数内部自动被传递,以便访问该对象的成员变量和成员函数。本文将介绍this指针的概念、用法和注意事项。概念this指针是一个指向当前对象的指针。它是一个内置的指针类型,可以在类的成员函数中使用。当调用一个成员函数时,编译器会将当前对象的地址作为this指针传递给该函数。因此,通过this指针可以访问当前对象的成员变量和成员函数。用法this指针可以用于以下几种情况:区分局部变量和成员变量当成员变量和局部变量同名时,可以使用this指针来区分它们。通过this指针访问成员变量,可以确保访问的是当前对象的成员变量,而不是局部变量。classMyClasspublic:voidsetX(intx)this->x=x;Jprivate:intx;J;intmain()MyClassobj;obj.setX(10);return0;)上面的代码定义了一个类MyClass,其中有一个成员变量X和一个成员函数setX。在SetX函数中,使用this指针来访问成员变量X,并将其设置为参数X的值。在main函数中创建了一个MyCIass对象obj,并调用了SetX函数来设置X的值为10。在一个对象的成员函数中返回对象本身在一个对象的成员函数中返回对象本身时,可以使用this指针来返回当前对象的地址。这样可以实现链式调用。classMyClasspublic:MyClass&setX(intx)this->x=x;return*this;private:intx;);intmain()MyClassobj;obj.setX(10).setX(20);return0;)上面的代码定义了一个类MyClass,其中有一个成员变量X和一个成员函数setX。在SetX函数中,使用this指针来返回当前对象的地址,并实现链式调用。在main函数中创建了一个MyCIass对象obj,并使用链式调用两次调用SetX函数来设置X的值为10和20。注意事项this指针只能在成员函数中使用。在非成员函数中使用this指针会导致编译错误。this指针是一个常量指针,不能被修改。如果试图修改this指针的值,会导致编译错误。this指针是一个隐式参数,不需要在函数调用时显式传递。因此,在调用成员函数时,不需要在参数列表中包含this指针。this指针可以用于访问当前对象的成员变量和成员函数。如果成员函数需要访问多个对象的成员变量,可以使用多个this指针来传递不同的对象地址。总结this指针是一个指向当前对象的指针,在成员函数内部自动被传递。它可以用于区分局部变量和成员变量,返回对象本身,访问当前对象的成员变量和成员函数等。但是需要注意,this指针只能在成员函数中使用,是一个常量指针,不需要显式传递,不能被修改。C÷+程序到C程序的翻译要想理解C+的this指针,我们可以先把下面的C÷+代码转换成C代码:classCarpublic:intm-price;voidSetPrice(intp)/.,<";intm_price = p; main()Carcar;car.SetPrice(20O);门.icereturn;C语言是没有类定义class关键词,但是有跟class类似的定义,那就是struct结构体。m_price变量是Car类的成员变量,那么我们可以把Car类和成员变量翻译成如下的C代码:/结构体CarstructCar/price变量是属于Car结构体这个域里的变量intprice;;SetPrice函数是Car类的成员函数,但是C程序里是没有成员函数这种概念的,所以只能把成员函数翻译成全局的函数:/Vttl:结构体Car的指St/*故2:较Q置的价格殳电voidSetPrUe(structCar*thts,tntp)this->price=p;/将/人的Carr.,111<lfzjpriceMt*为什么要加个this的指针呢?我们继续往下看。在这里我们把上面C+程序的main函数翻译C程序,是这样的:Intmai()structCarcar;SetPrice(&car,);return;所以最终把上述的C+程序转换成C程序的代码如下:所以加SetPrice函数的第一个参数this指针的作用,就是为了给结构体Car域里的变量赋值。this指针的作用其作用就是指向成员函数所作用的对象,所以非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。下面的例子可以很好的说明this的作用:/include<tostream>classCarpublic:Intm-prlce;voidPrintPrtce()std:cout«m,prtce«std:endl;voidSetPrice(Intp)thts->m,price=;/等价丁m_prtce=p;this->PrtntPrice();/PrintPrice();)CarGetCar()(return*this;/返回该相数作用的对象);intmain(void)(Carcarl,car2;carl.SetPrice(2);/carl.GetCar()返其所作用的carl对象,并把返I可的carl赋值给了car2car2carl.GetCar();car2.PrintPrice();return;输出结果:2000020000接下来我们看下面的代码,你觉得输出结果是什么呢?会出错吗?classAprivate:intt;public:voidHello()cout«"hello"«endl;;intmain()A*p=NULL;p->Hello();结果会怎样?答案是正常输出hello,你可能会好奇明明p指针是空的,不应该是会程序奔溃吗?别着急,我们先把上面的代码转换C程序,就能理解为什么能正常运行了。voidHello()cout«"hello"«endl;/成员函数相当如下形式:voidHello(A*this)cout«"hello"«endl;p->Hello();/执行HeUO()形式相当于:Hello(p);所以,实际上每个成员函数的第一个参数默认都有个指向对象的this指针,上述情况下如果this指针指向的对象是空,相当于成员函数的第一个参数是NULL,那么只要成员函数没有使用到成员变量,是可以正常执行。那么下面这份代码执行时,就会奔溃了,因为this指针是空的,使用了空的指针指向了成员变量i,程序就会奔溃。classAinti;public:voidHeUo()cout«i«"hello"«endl;/-»voidHello(A*this)cout«this->t«hello"«endl;);intmain()A*p»NULL;p->Hello();/-»Hello(p);)this指针和静态成员函数静态成员函数是不能使用this指针,因为静态成员函数相当于是共享的变量,不属于某个对象的变量。C+类中this指针的理解:先要理解class的意思。ClaSS应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如intX,myclassmy等等。这样就像变量X具有血类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this就是指向my的指针。如果还有一个变量myclassmz,mz的this就是指向mz的指针。这样就很容易理解this的类型应该是myclass,而对其的解引用this就应该是一个myclass类型的变量。通常在ClaSS定义时要用到类型变量自身时,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。另外一个理解:一个学生可以有多本书一样,而这些书都是属于这个同学的;同理,如果有很多个同学在一起,那么为了确定他们的书不要拿混淆了,最好的办法我想应该就是每个同学都在自己的书上写上名字,这样肯定就不会拿错了。同理,一个对象的多个成员就可看作是这个对象所拥有的书;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。在C+中,我们利用this指针帮助对象做到这一点,this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。1>this指针的用处:一个对象的this指针并不是对象本身的一部分,不会影响SiZeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。例如,调用:date.SetMonth(9)<=>SetMonth(&date,9)this帮助完成了这一转换在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。任何对类成员的直接访问都被看成this的隐式使用。this的目的总是指向这个对象,所以this是一个常量指针,我们不允许改变this中保存的地址.2、this指针的使用:一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用return*this;另外一种情况是当参数与成员变量名相同时,如this->n=n(不能写成n=n)。this指针程序示例:this指针是存在与类的成员函数中,指向被调用函数所在的类实例的地址。根据以下程序来说明this指针:#include<iostream.h>classPointintx,y;public:Point(inta,intb)x=a;y=b;)VoidMovePoint(inta,intb)x+=a;y÷=b;)Voidprint()cout<<"x="<<x<<y="<<y<<endl;);voidmain()Pointpointl(10,10);pointl.MovePoint(2,2);pointl.print();当对象POintI调用MOVePOint(2,2)函数时,即将POintl对象的地址传递给了IhiS指针。MoVePoint函数的原型应该是voidMovePoint(Point*this,inta,intb);第一个参数是指向该类对象的一个指针,我们在定义成员函数时没看见是因为这个参数在类中是隐含的。这样pointl的地址传递给了this,所以在MovePoint函数中便显式的写成:voidMovePoint(inta,intb)this->x+=a;this->y+=b;)即可以知道,POintl调用该函数后,也就是POintl的数据成员被调用并更新了值。即该函数过程可写成:pointl.X+=a;pointl.y+=b;案例二:#include<iostream>usingnamespacestd;classAjpubliciintget()constreturni;voidset(i

    注意事项

    本文(C++ this指针的理解和作用.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开