代码将会持续更新,在此就放仓库代码链接了
基础
基础类
‼️基础版本的Human类,包含如下的部分:
构造函数
- 默认构造函数
- 带参数的构造函数
- 拷贝构造函数
- 移动构造函数
赋值函数
- 拷贝赋值函数
- 移动赋值函数
友元函数
重载运算符
不能重载的运算符只有5个:
.
成员访问运算符.*
成员指针访问运算符::
域运算符sizeof
长度运算符?:
条件运算符
设计模式
单实例
‼️最优雅的懒汉单实例模式,
饿汉模式,getinstance和初始化的顺序是不确定的,可能会存在调用未初始化对象的情况
C++中static对象的初始化
- non-local static object,在main函数之前进行初始化,单线程模式,单多个模块之间的初始化顺序是随机的。
- local static object,发生在控制流第一次到达的时候,在c++11之前是线程不安全的,在c++11之后是线程安全的。
在类中函数外被static声明的变量,不会被初始化
工厂模式
参考 知乎小林
简单工厂。通过枚举类型创建类,通过虚函数调用自定义方法
方法工厂,通过不同的derived class的创建方法,创建不同类别的鞋,省去了枚举类型的办法
抽象工厂,在方法工厂的基础上,让一个Factory可以生产多个产品。
模版工厂,通过一个抽象的模板,一个具体产品的模板实现不同品类的创建
‼️注册模板工厂,在模板工厂里面的ConcreteFactory添加注册动作,将产品注册到单例模式中。
重新编写了一下这部分的代码,涉及到范型和继承,是个很好的学习例子
观察者模式
观察者模式分为两大部分组成,一部分是Subject,另一部分是Observer。
Subject中包含了Observer对象的数组
Observer中包含了指向Subject的指针
工作原理是,Subject中包含一个变量,在修改变量之后,Subject可以调用notify函数,遍历执行所有Observer对象的update函数,而update函数会根据subject中变量的内容做出差异性的动作。