C++中类的指针
一个类只有一个指针吗?比如this指针。事实上每一个基类都有一个指针,这样一个多重继承和多态继承的类就有多个this指针,但如果所有这些类层次都是单一继承,那么所有指针都是相同的,指向实例的起始位置。this指针并不会真实的存贮在某个地方,它是编译器在编译时确定的,就象sizeof运算符。我们要清楚,在类的不同层次位置使用的this指针的值并不一定相同(在多态继承的情况下)。
不仅仅是this指针,编译器会自动对不同的指针类型赋不同的值。比如下面的代码:
class A
{
int i;
};
class B
{
int j;
};
class C:public A,public B
{
int k;
};
int main()
{
C c;
A* pa = &c;
B* pb = &c;
………
}
测试结果,pa并不等于pb。可见类的指针的赋值不同于通常的变量赋值。实际上因为A*或B*的类型与&c并不相同(C*),这里包含一个自动的类型转换。正是这个类型转换自动为pa和pb赋予了不同的值。这样,保证了在使用这些指针访问类的成员时的正确性。
要注意同一个类的实例,它的不同类型(基类)的指针并不一定相同。这发生在两种情况下:一种是多继承,另一种是基类没有虚拟函数,而派生类有虚拟函数。这两种情况,派生类和基类的指针都不相同。