C++ 类指针的问题

c/c++

浏览数:290

2019-3-30

这一部分要谈的是指针的类型。

Q1 : 一个指向class-a的指针,和一个指向class-b的指针 它们有什么区别?
比如:

Animal * a;
int *pi;
string * s;
相同之处:

从内存的角度来看,没有什么问题,它们都是在自己的内存空间里面放置一个地址。大小都是4。

不同之处:

不同指针之间的差异,是在其所寻址出来的object类型不同。也就是说,“指针类型”会教导编译器如何解释某个特定地址总的内存内容及其大小。也就是区别在于:

  1. 如何解释指针指向的这个内存空间里面的二进制数,比如unsigned int 和int 就是完全不一样的解释。
  2. 告诉编译器,指针可访问的偏移的长度是多少
我们在回到这个类指针的问题,如果有一个基类和一个派生类的指针,那么它们的区别是什么?
class Animal {
private:
    int loc;
    int id;
public:
     ...
};

class Bear : public Animal {
private:
    char name[8];
    int age;

public:
     ...
};

int main(){
    Bear b;
  //那么指针ap和bp有什么区别?
    Animal * pa = &b;
    Bear * pb = &b;
}

还是刚才的那个问题,ap 和bp有什么区别?
它们都指向的是派生类对象b的第一个字节的地方,其间的差别是,pb所涵盖的地址范围包含了整个bear 对象,但是pa所涵盖的地址只包含了bear对象中基类的部分。