Composition
- 组合
- 其实就是一个类(Container)中包含了另一个类的实例(Component),注意是实例。
delegate
- 组合的一种
- 但是包含的是一个类的引用(reference)。
组合的使用
- 用这样的方式可以做出adapter模式,比如A功能很多但是如果只要暴露出一部分,可以用B来包含A,然后只在B中定义一些方法,这些方法都是直接调用A的即可。
- 还可以引申出面向接口编程。比如A中要调用某一类的功能,但是这些功能可以由B\C\D来提供,或者说不通的条件下使用不通的提供者,那么我们就可以为这些功能定义一个接口,然后让BCD实现接口,A中只要是一个对接口类型的引用即可。
- PS:目前我看到C++里面的接口是用虚函数实现的。
no-virtual&virtual
- C++的函数使用virtual关键字标记为虚函数。
- 虚函数分为纯虚函数和虚函数,区别就是虚函数是有实现的,哪怕只是个空的函数体
{}
。但是纯虚函数是没有实现的,定义方式为virtual void Foo() = 0
- 虚函数不要求子对象一定实现override,但是纯虚函数要求一定实现。