C++类中this指针的说明

来源:互联网 发布:修改linux登入密码 编辑:程序博客网 时间:2024/04/29 23:07

this指针

1.说明:当程序中一个类定义了多个对象,多个对象都调用类中同一个成员函数时,此时怎么区别这个成员函数在哪个对象上操作,C++提供了this指针。如:

class Data{public:void SetData(int year,int month,int day){_year=year;_month=month;_day=day;}private:int _year;int _month;int _day;};int main(){Data d1,d2;d1.SetData(2016,9,25);d2.SetData(2016,9,25);return 0;}
创建两个Data类对象d1,d2,都调用成员函数SetData()函数,此时它是在那一个对象上操作,this指针发生作用。

2.定义:每个类的成员函数都默认隐含定义了一个指针,当创建一个类对象并用对象调用成员函数时,这个指针就被初始化为这个对象的地址,使它指向调用函数的对象,这个指针被称为this指针。即如上段代码Data类中成员函数SetData(),它会在识别类时编译器对其进行改写,变为:

void SetDate(Date* const this, int year, int month, int day){        this->_year = year;this->_month = month;this->_day = day;}


上述出现this指针即默认隐含的指针,在对象d1调用下,this指针存放的地址与d1的地址相同,所以其在不同情况下分别指向d1、d2两个对象地址。而这个成员函数实现方式与C语言中结构体实现方式相同,如:

struct Date{int _year;int _month;int _day;};void SetDate(<span style="color:#ff0000;">Date* _this</span>, int year, int month, int day){_this->_year = year;_this->_month = month;_this->_day = day;}int main(){Date d1;SetDate(<span style="color:#ff0000;">&d1</span>, 2016, 9, 26);return 0;}
上述代码创建结构体对象d1,在函数中传人d1地址,用_this指针接收,所以这两种实现方法是相同的。

由上也可总结出this指针—

3.特性:

(1)类型:类类型 *const(常量指针),this指针不能被修改和赋值(它存放的是某一个类对象地址);

(2)this指针是一个隐含指针,不能被显示声明,它是类成员函数的第一个默认隐含参数,在函数体内可隐含使用它来访问本类的数据成员和成员函数,它并由编译器自动维护传递;

(3)this指针是局部变量,局部每个对象,在任何非静态成员函数中都可见;

(4)this指针只有在对象调用成员函数时才被初始化重新定向,指向对象隐式传递到成员函数,进入不能再被修改;

(5)this指针并不是对象一部分,不影响sizeof 结果,它的作用域一般在类成员函数内部。



0 0
原创粉丝点击