Pages

jeudi 9 septembre 2010

C++关于this指针



This指针是在实例化一个对象后产生的,并且指向对象本身。
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。

类的this指针有以下特点

(1)this指针只能在成员函数中使用。全局函数、静态函数中不能使用this指针。
(2)this指针在成员函数的开始前构造,在成员函数结束后清除。这个生命周期和函数的参数是一致的。实际上,成员函数默认的第一个参数为T* const this。例如:
class A{
public:
    int func(int p){}
}
函数func的原型在编译器中应该是:int func(A* const this,int p);
    由于this指针被声明为* const,它是一个指针常量,因此不能改变它的值(在低版本的C++中,修改this指针是可以的),但可以改变它所指对象的值。
this指针的作用(1)限定被相似的名称隐藏的成员.
例如:
public Person(string name, string sex) 

this.name = name; 
this.sex = sex; 

(2)在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;




几个关于this指针的问题(1)this指针在成员函数的开始前构造,在成员函数结束后清除。this指针指向的是实例化对象的地址。


(2)this指针存放在何处?堆、栈、全局变量?
this指针因为编译器的不同会有不同的放置位置,可能是栈,也可能是寄存器,甚至是全局变量。


(3)this指针是如何传递给类中的函数的?
this是通过函数参数的首参数来传递的,也就是说成员函数默认的第一个参数为T* const this.


(4)获得一个对象后,只有在成员函数里才能知道this指针的位置,可以通过&this来获取。因为this指针只有在成员函数中才有定义,因此只能在成员函数中使用指针。

(5)每个类编译后,是否创建一个类中函数表来保存函数指针,以便用来调用函数?
普通的类函数(无论是成员函数还是静态函数)都不会创建一个函数表来保存函数指针。只有虚函数才会被放到函数表中。




关于this指针的一个精典回答: 
当你进入一个房子后, 
你可以看见桌子、椅子、地板等, 
但是房子你是看不到全貌了。 

对于一个类的实例来说, 
你可以看到它的成员函数、成员变量, 
但是实例本身呢? 
this是一个指针,它时时刻刻指向你这个实例本身

Aucun commentaire:

Enregistrer un commentaire