C++ 类指针的问题

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

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对象中基类的部分。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,554评论 1 51
  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 2,179评论 0 22
  • 1. C++基础知识点 1.1 有符号类型和无符号类型 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值...
    Mr希灵阅读 18,043评论 3 82
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,524评论 3 44
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 2,897评论 0 3