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
赋予了不同的值。这样,保证了在使用这些指针访问类的成员时的正确性。
要注意同一个类的实例,它的不同类型(基类)的指针并不一定相同。这发生在两种情况下:一种是多继承,另一种是基类没有虚拟函数,而派生类有虚拟函数。这两种情况,派生类和基类的指针都不相同。