《深度探索C++对象模型》第1章 关于对象
本分类博客为我对《深度探索C++对象模型》一书的读书笔记,我自知功力浅薄,难免有不少看不懂的地方,因此笔记中可能会有不足或错误,若有发现烦请指出,谢谢> <
比较可惜的是中文互联网中针对本书的公开讲解视频似乎不多,以下链接为我在学习时的参考视频(此后就不再逐一列举了):
1.C++对象模式
C++中,两种class data member:static 和 nonstatic;三种class function member:static、nonstatic 和 virtual。函数放在代码区,static成员放在静态区。

2.对象的差异

以上三个指针,本质上没有区别,都是占用4Byte(32位机器)的地址值,其类型主要体现在所指的object类型上,指针类型会教导编译器某个特定地址中“内容及空间大小”。

如果是一个指向地址1000的void*指针,那么只能得到一个空间的起始地址,大小和内容将不得而知,无法操作object。

尽管指针的值相同,但指向的对象的类类型不同,子类对象涵盖的空间比父类对象大。
因此不能让子类类型指针指向父类对象,否则会非法访问到超出父类对象的空间,引起安全问题。
但父类类型指针可以指向子类对象(多态)。如下,将子类空间切割至父类空间:

上述代码中用“=”直接将子类对象赋值给父类会产生切割,za在本质上还是一个ZooAnimal;
而如果想使用多态的特性则需要使用pointer和reference,将父类指针指向子类对象,这样的pointer本质上还是一个子类的pointer,不过访问的内容和大小受限。
浙公网安备 33010602011771号