<C++ Primer>第三版和<设计模式>都是相当经典的著作,尽管这两本书我已经反复看了几次,但界于C++的庞大精深,又没有一个统一的完整规范及设计模式的变化多端,我们只能就着大师的著作,提取精华,便于工作中参考。
下面把笔记摘录如下,不一定按照本书的目录,中间可能会加入设计模式,不便阅读之处,请读者谅解。
(一) <C++ Primer> 第三版 :
1. 缺省情况下,C++继承是按值继承,每个类拥有该类和继承类的所有非静态成员和方法。
2. 虚拟继承提供了按引用继承的机制,它只支持一个共享的基类被继承,防止了多继承中资源重复和实例冲突 (比如被继承基类对实例基类初始化的不同)。
3. 一般情况下,尽可能少用虚拟方法和虚拟派生,以节约内存空间。使用的原则是 基于需要。
4. 多继承的基类也包括结构体。
示例:
//假定S_BASE 是结构体
(1) class Derived : public Base { }; //普通单继承
(2) class Derived : public Base<int>{ }; //模板类实例单继承
(3) template<class T> class Derived: public virtual Base<T> { }; //模板类单继承
(4) class Derived : public S_BASE { }; //结构体单继承
5. namespace主要用在类库开发上
6. 禁止类的构造和拷贝
通过将 A(const A&);和A operator = (const A&);两个方法设定为私有方法即可.
7. 异常处理的方法包括try...catch处理和异常类的构造两种.
8. 常用操作符的重载包括++,--,->,*等.
9. 模板分函数模板和类模板,支持特化和部分特化。其中类模板还支持友元。
10. 友元分友元函数和友元类,在某类中声明友元函数或类,便赋予了友元函数或类访问该类非公有成员的权利。
11. 抽象类的构造通过纯虚函数来实现,模式设计中AbstractFactory ,Bridge等都有赖于此。
12. 类可以嵌套类,联合,结构体。
13. 结构体分带位域的结构体和不带位域的结构体。
14. public,protected,private继承分别把基类的公有成员派生为对应的public,protected,private成员。
15. 函数指针的各项妙用(包括回调,结构体中的组合等等)。
16. 模板类中支持类型重定义,简化程序的编写。模板类的导出。
17. RTTI的支持: dynmic_cast, typeid,typeinfo。
(二) <设计模式>
1. Flyweight模式:共享大量细粒度的对象。
2. Adapter模式: 将类的接口转换成用户希望的另外一个接口。
3. Bridge模式 : 将类的抽象和实现部分分离,使之独立变化。
4. Facade模式: 给一组接口提供一致的界面。
5. Proxy模式: 给其他对象提供访问特定对象的代理控制。
6. Decorator模式:动态给对象添加额外职责。
7. Iterator模式: 提供了一种在不暴露对象内部表示的情况下顺序访问聚合对象中的各个元素的方法。
8. Strategy模式: 封装一系列算法,并使它们可以相互替换。
9. Singleton模式: 单实例
10. Abstract Factory模式: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
其余的模式就不罗列了。
设计模式的感悟:
// 访问可以分为继承,包含 和 引用。
(1) . Flyweight模式不过是先缓存一个数组或列表,并提供给外部访问的方法。
(2). Iterator模式就类似于架构在Flyweight模式之上,只是把随机访问改成了顺序(或顺序遍历)访问。
(3). Adapter模式就是通过包含原类(包含的方式通过创建和外部引用),并构造出用户期望的接口,内部实现仍是通过原类实现。
(4). Bridge模式类似于引用型的Adapter模式。
(5). Facade模式就好比可口可乐的售货机。
(6). Proxy模式是Adapter的内部创建型的简化版本。
(7). Strategy模式是多态概念的延伸。
(8). Decorator模式 是外部引用型Adapter模式的延伸。
(9). Abstract Factory模式用抽象的方式构造出工厂,车间和零件, 使得外部访问通过抽象工厂来进行,可以包罗大部分的设计模式在里面。
(10). 设计模式不是孤立的,是组合,是变种,使用的方式也是基于设计的需要为主。