再读C++的设计艺术(1)

Posted by Johan Niu on March 11, 2018

再读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、执行错误与编译器错误的区别。

想想电影院摸姑娘,看门把手门口,进入电影院,再有人摸姑娘,放狗咬人。

同样的道理:

不符合语法等标准,编译器不放过去。符合标准,编译器放过。

但是如果有违规操作,依然会有运行错误报错,禁止执行。