August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
我们已经讨论过,类的公有接口和实现部分应该分离。只要为那些“旧式简单数据”类型保留着struct功能,不同意接口和实现分离原则的专业人员就会很少。但是,我们如何来设计一个好的接口呢?好的公有接口和乱糟糟的接口之间有什么区别呢?回答这个问题必须借助实例,但我们仍能列出一些一般原则,它们在C++中都有支持:
·保持接口的完整性。
·保持接口的最小化。
·提供构造函数。
·支持(或者禁止)拷贝(参见19.2.4节)。
·使用类型来提供完善的参数检查。
·识别不可修改的成员函数(参见9.7.4节)。
·在析构函数中释放所有资源(参见12.5节)。
也请参考5.5节(如何检测及报告运行时错误)。
前两条原则可以归结为“保持接口尽可能小,但不要更小了”。我们希望接口尽量小,是因为小的接口易于学习和记忆,而实现者也不会为不必要的和很少使用的功能浪费大量时间。小的接口还意味着有错误发生时,我们只需检查很少的函数来定位错误。平均来看,公有成员函数越多,查找bug就越困难——调试带有公有数据的类是非常复杂的,不要让我们陷入其中。当然,前提还是要保证完整性,否则接口就没有用处了。如果一个接口无法完成我们真正需要做的全部工作,我们是不会使用它的。
下面我们讨论其他一些话题,这些话题更为具体,直接对应C++语言功能。