侯捷老师-02面向对象高级编程
1.Static使用
Static本质
- 正常对象和函数:非静态对象在调用成员函数的时候,会返回自身指针,函数也需要通过指针才能找到对应对象,并对其进行处理。
- 静态数据成员和静态成员函数:
1.静态成员没有“this”指针。
2.静态成员函数只能对静态数据成员进行数据操作。(不接收“this”指针)
Static使用
Static的两种使用方式:
- 通过类对象进行调用;
- 通过类名调用
注意类结构体后一定要对静态成员进行“初始化”。
Static使用举例-单例模式
单例模式的构造函数在被放在“私有”下。
- 静态成员只能被静态成员函数调用,因此静态成员函数是唯一和外界沟通的接口。只有静态成员被静态成员函数调用后,才能调用其他函数。
- 由于“a”静态成员对象一直放在“private”下,因此就算不是该类,也一直存在这个对象(占用内存)。
Static使用举例-单例模式(改进)
对于在没有使用该类还存在一个对象内存的情况,进行改善。
将静态成员在静态成员函数中进行构造,在没有调用这个静态成员函数的情况下,不会创造该类对象。
2.模板使用
Class Template类模板
function template 函数模板
- 编译器自动对函数模板进行类型推导。
- 上面两个模板使用“typename”或“class”都可以。
3.命名空间使用
命名空间“std”可以自己命名,防止和别人代码冲撞。代码最开始包含需要的命名空间。
- 使用命令
- 使用声明:选择性使用要包含的代码
- 什么都不加
额外细节
4.复合(has a)
4.1定义
在A类中使用B类作为成员对象。流程图表示为实心菱形。
4.2复合关系下 类内存大小的计算
4.3复合关系下 类中构造、析构顺序
4.4复合+继承
由内而外的构造,同理析构由外而内的析构。
5.委托
设计模式之一:pimpl。左图是对外接口,右图是具体的实现操作。该模式能实现在改变右边(操作内容)的同时,不影响左边,不影响客户端。由于左边是指针,因此能够动态的指向除右边以外的别的类实现,更有弹性。
- a、b、c三个指针是左边的rep指针,三指针共享一个内存。
- 虚线圆圈代表右边的代码。
- 如若a、b、c有想改变内容,重新copy一份给它该。
5.1 委托实例( 委托+继承)
同一份数据使用多个和窗口观察。
5.2委托+继承
5.2.1 Composite
有名设计模式:Composite
5.2.2 Prototype
构造函数一定是私有的,不能让外部访问。其中有参构造可以是protect也可以是private的。