一个类只有一个指针吗?

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 赋予了不同的值。这样,保证了在使用这些指针访问类的成员时的正确性。
要注意同一个类的实例,它的不同类型(基类)的指针并不一定相同。这发生在两种情况下:一种是多继承,另一种是基类没有虚拟函数,而派生类有虚拟函数。这两种情况,派生类和基类的指针都不相同。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值