再读C++的设计艺术(1)
一 背景
研一选修杨力祥老师的《C++的设计艺术》,觉得受益匪浅。
经过研二研三上半年的代码项目经历,对面向对象理解的更加深入,决定再回过头来看看这边本,发现又有更加深入的体会。
因此整理出笔记。
二 面向对象的概念。
1、高级语言中类型的概念
类型的概念与类的概念非常相似
(1):
int a, b ,c
(2):
class A { .......}
A a, b, c
从数据类型到C中的结构体,再到C++的中类。
结构体主要实现对不同数据类型的封装。
类不仅实现对不同类型数据的封装,还实现对函数方法的封装。
2、面向对象的概念相当于做月饼
类/class相当于做月饼的模子,对象/object相当于模子做出来的月饼。
类是给编译器看的,编译器按照类的模子,创造出对象(月饼)。
内存中真正存的是对象与对象的实例。
3、类的概念可以通过娃娃机来理解
类中有public、private。
public是可以让外部访问的,相当于娃娃机的抓手。
private是不能让外部访问的,相当于娃娃机的玻璃,禁止外部访问。
如果没有private,相当于直接把玻璃打碎,去拿东西。
这个时候也可以,但是娃娃机就没有了意义。类也没有了封装的意义。
可以将类看做一个人,public是人与外界打交道的眼睛、口、鼻子等,
而private是人体内部的肠、胃等内部器官。
吃饭必须通过口,拉屎必须通过肛门,
而不是直接将食物放到胃里,将粪便从肠子拿出来。
这些直接去操作private的都属于不规范、违规操作。叫做强耦合。
所以进行面向对象编程时候,必须抽象好类,封装好对象,
类中哪些是数据,哪些是方法,哪些要private。尽量把所有的数据都保护起来。
4、执行错误与编译器错误的区别。
想想电影院摸姑娘,看门把手门口,进入电影院,再有人摸姑娘,放狗咬人。
同样的道理:
不符合语法等标准,编译器不放过去。符合标准,编译器放过。
但是如果有违规操作,依然会有运行错误报错,禁止执行。