CPP

侯捷C++学习笔记:面向对象

Posted by 蔡华的博客 on January 2, 2018

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,但是纯虚函数要求一定实现。