首页 > 编程知识 正文

this指针的用法,this指针的作用

时间:2023-05-06 05:48:57 阅读:41135 作者:2488

文章目录:1. const的使用2. this指针2.1序言(this指针的引出)2. this指针2.3什么是this指针的特性2.4? 2.5 [面试题2] this指针可以是空的吗? 3 .老办法

1 .使用常数

使用const有四种情况:

constint * pint const * pint * constpconstint * constp您可以在下图中了解这四种情况const限定了谁。

http://www.Sina.com/http://www.Sina.com /

2. this指针2.1序言(this指针的引出)查看以下代码,Date类有两个成员函数: Display和SetDate,函数体没有不同对象的区别,但d1表示SetDate函数

# includeiostreamusingnamespacestd; class date { public : void display (} { cout _ year ' _ _ month ' _ ' _ day endl; }voidsetdate(intyear,int month,int day ) {_year=year; _month=month; _day=day; }private:int _year; int _month; int _day; (; int main () {Date d1,d2; D1 .设置日期(2018、12、15 ); D2 .设置日期(2021、4、8 ); D1 .显示(; D2 .显示(; 返回0; }为了解决上述问题,在c上引入了this指针

2.2this指针c编译器是指为每个“非静态成员函数”添加隐藏指针参数,以使指针指向当前对象,通过该指针访问函数主体中所有成员变量的操作。 但是,所有操作对用户都是透明的。 这意味着它不需要用户传递,而是由编译器自动完成。

2.3 this指针的特性this指针的类型:类类型* const :只能在“成员函数”内部使用的this指针本质上是成员函数的参数,在对象调用成员函数时执行对象地址因此,没有在对象上包含this指针的this指针是成员函数的第一个隐式指针参数,通常由编译器通过ecx寄存器自动传递。 用户不必传递this指针来表示当前对象的地址。 一般来说,这是隐藏的验证1。

这里为什么要报告错误? 由于this指针通常由编译器通过ecx寄存器自动传递,因此不需要用户传递,用户写入this指针就相当于编译器完成了工作,因此会报告错误

验证2 :

在什么情况下需要写入this指针?

如上图所示,在情况1中,如果不使用this指针,则无论专用属性是_year、_month还是_day都将自己分配给自己,并且这样写,哪个专用属性是参数中的哪个

2.4 [面试题1] this指南在哪里? 编译器在程序生成时加入获取对象起始地址的相关代码,并将获取的相关起始地址存储在寄存器ECX中(VC编译器存储在ECX中,但其他编译器可能不同)。 也就是当const在 “ * ” 的左边,则指向的值不能被修改

2.5 [面试题2] this指针可以是空的吗? 在我们调用函数时,如果在函数内部不需要用到this指针,即不需要用this指针指向当前对象进行操作,则this指针可以为空。 (eg )函数中什么也不放,或者随便打印字符串) )。 调用的函数需要指向当前对象的this指针,并且在执行操作时,this指针不能为空。 空指针引用时发生错误

3 .在常规成员函数之后添加const限定的方法是常规成员函数

常规方法可以访问对象中的常规成员。 此外,常规成员的常规方法无法更改数据数据的值当const在 “ * ” 的右边,则自身不能被修改。 这样可以防止程序员意外更改成员变量的值

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。