c++编程思想(四)--对象和隐藏(感觉书上有误)

时间:2024-01-07 16:24:44

c++编程思想里数据抽象和隐藏实现实际就是通常所说的类和封装;

封装,继承,多态对象特点说的很多,就不再说了

关于封装,本人觉得书上有个地方写的有问题,p145和p153都提到Y::f(X*)引用了X对象的地址,编译器只需要知道如何传递一个地址,而不需要知道实际对象大小结构(实际上传地址不知道实际对象大小结构也是不能调用的,知道实际对象大小直接Y::f(X)也一样)。然而试图传递整个对象,编译器必须知道对象大小,以及如何传递,无法直接申明 Y::g(X) 的函数(实际也可以),看下面例子

c++编程思想(四)--对象和隐藏(感觉书上有误)

如上所述,是能编译通过且运行的,也就是不知道实际对象大小结构时候,也可以申请的,只是下面调用会出问题,报错

c++编程思想(四)--对象和隐藏(感觉书上有误)

这样即使换成

void Y::f(X *x)

  x->a = 5;

}也会报错,

也就是知道申明对象之后,下面如果引用 对象和对象地址 都可以

知道对象结构之后,通过对象和对象地址使用对象都是可以的,不知道对象大小结构之后通过对象和对象地址使用对象都是非法的

因此实验发现 引用实际对象和对象地址并没有区别

并且发现其他易犯的错误:

1、(对象)函数申明完之后,就可以使用,哪怕实际定义在调用下面也可以,但是用到对象里变量(实际内存)时,必须知道对象实际大小和结构

2、c++的类有默认构造函数,但是并不是所有的,是要满足一定条件的,上面的例子如果注释掉x的构造函数就会报错,所以简易创建类的时候自己要加构造函数

c++编程思想(四)--对象和隐藏(感觉书上有误)

上面写的都很白话。因为自己现在对于原理也不是很精通,都是通过编写简单的例子发现的。。如有不对,欢迎告之