effecitve c++ 条款36-40

effective c++的下载地址http://download.csdn.net/detail/mlkiller/5335383

条款36: 区分接口继承和实现继承

书中的例子讲的很详细,我就不敢班门弄斧了,这里主要是总结一下,方便大家记忆。
大家都知道类的成员函数有三种:
纯虚函数,虚函数,普通函数。
第一,纯虚函数主要是用来接口继承。而且一般父类中不实行纯虚函数。
第二,虚函数主要提供接口继承和默认缺省的实现继承。
         这里需要注意一点,可以看看书上的例子,设计的时候需要注意,这样做很危险,你需要考虑是否有些子类的实现方式不一样,而你这样设计,其他人并不知情,导致出现问题。
这样可以考虑上面两种相结合的方式去实现。
第三,普通函数(非虚函数),一个接口继承和强制实现。
     认为父类和子类的实现是一致的。

条款37: 决不要重新定义继承而来的非虚函数

这个原因在于,非虚函数主要是希望父类和子类对这个函数都是一致的。
如果你重新定义了,在使用指针的时候就会很混乱,所以要想好怎么设计。

条款38: 决不要重新定义继承而来的缺省参数值

根据37,我们继承的肯定是虚函数。
那么,书上这句话写的很明确了,虚函数是动态绑定而缺省参数值是静态绑定的。


条款39: 避免 "向下转换" 继承层次

1 向下转换是指 从基类向派生类的转换。
2 如何避免:虚函数和加强类型约束
3必须使用的时候,采用安全的向下转换。dynamic_cast

条款40: 通过分层来体现 "有一个" 或 "用...来实现"


"分层" 这一术语有很多同义词,它也常被称为:构成(composition),包含(containment)或嵌入(embedding)。
就是我们之前讨论的公有继承“是一个的关系”
如果是有一个的关系,或”用。。。来实现"就要用分层的关系。

感觉这些还是怎么去合理的设计一个类。

你可能感兴趣的:(C++,类,effective)