笔记范围:2.3节
早在2.1里作者就留给我们一个问题:要成为c++的一等公民需要那些条件(练习2.2)?个人认为这个问题非常重要。它直接关系到我们对类的设计思想和努力的方向,显然我们的方向该是:尽可能的让我们设计的类成为语言的一等公民,换句话说,在类的设计中,对于运算符的支持要比一般的成员函数更重要,这样做的另一个考虑是为我们以后学习STL提供思维的延续,可见。如果我们只把c++当成oo的语言,是不会这样想的 ,
对于初学者来说,想在本节完全学会很好类的代码实现,几乎是不现实的,在本节的内容里,我们的任务是理解设计思路、了解类的基本结构,学会用伪代码设计一个能满足需求的class,下面是我在本节中所理解的东西,
第一步:明确设计需求,我们可以仔细看一下作者写出的功能表,显然,就功能而言,它并不完善,但能满足一方的需求,这里我们可以感觉一下作者的专业品质:以用户需求为目标,我们的软件常常有这样问题,几百mb的程序,事实上我们真正用到的可能不足百分之一,成本和资源都得到很大的浪费,好像只满足了设计者的虚荣心,
第二步:确定要封装的数据,当然,我们先要明白的是:封装的目的是为了保证对象数据的相对安全,要通分理解封装的涵义,比如:
class a {
int i
public:
….};
class b {
a s;
public:
….}
几天前就有人问我这样的问题。,b是否可以操作s中的数据,答案是:yes。但是如果这样问。。s中的数据在b是否可用,答案则是,no,原因在于对于封装的数据而言,只有通过s自身的方法才有权使用。那么b如何操作s的数据呢?这就引出了第三步.
第三步,设计公有接口。个人觉得接口和方法是有区别的,接口包括运算符和方法,当然他们都靠函数完成。但对函数的实现目标有着明显的不同,运算符考虑的是对象之间的关系。而方法考虑的是对象本身属性的操作,对于设计一个数据类型来说显然前者更重要,对于内置的数组来说。我们并没有考虑其本身的东西。但是,谁能说他不算class呢?不过不是我们设计的罢了,
接下来,谈谈一些习惯问题,可能先看国内教材的人都会发现。在本书中public写在private之前。看起来好像没有多大的区别,其实我们应该发现,如果私有成员写前面关键字private可以不写,这不利于代码的可读性,我们要时刻为自己以后的合作提供良好习惯和代码风格。这样也该是程序员的基本素质之一吧?