持续更新中…
1.有个通用的使用多态、虚函数 的方法:
- 1.定义一个容器,其中的元素类型是基类,在容器中存入不同子类类型的指针。
- 2.不同子类中定义自己的接口虚函数。
- 3.当遍历该容器时,会根据该容器中的不同类型自动调用不同子类的接口函数。
2.如果增加一个需求 或者 更改一个需求很频繁时候
做法是:
- 1.先定义一个基类
Base_A,在这个基类定义公共的一个接口虚函数Func(); - 2.再定义子类
Derived_B、Derived_C继承于这个基类Base_A,在子类Derived_B、Derived_C中去具体实现这个需求的虚函数接口Func()。 - 3.在另一个类
Class_C中定义一个容器(以vector容器为例)std::vector<Base_A*> Vct,通过在容器Vct中增加或者修改要使用的具体子类类型Derived_B或Derived_C的对象.
当遍历该容器Vct时,会根据该容器中的不同类型自动调用不同子类的接口函数Func()。
3.区分组合和聚合的方法:生命周期是否一致。一致的是组合,不一致的是聚合。
中间的装饰器是为了提取公共代码???
4.单一职责原则:一个类只有一个变化的原因。
5.依赖倒置原则:应该依赖抽象,而不应该依赖实现细节。(李老师说了一句,这里的依赖指的是编译时依赖???)
6.面向接口编程:最简单的一个表现形式就是,变量要声明成 抽象基类。
只要是new出来的,都是实现细节,是细节依赖,紧耦合(依赖具体类)。Base *A=new Derived();这种做法违背依赖倒置原则。因为Base *A是抽象基类接口,而new Derived()带来的是细节依赖,紧耦合(依赖具体类)。—工厂模式讲解
7.虚函数就是延时到运行时!
虚函数就是把函数的调用延时到运行时确定!
8.C++的多态性分为两种:编译时的多态、运行时的多态; 使用重载来实现编译时的多态,使用虚函数来实现运行时的多态。
如果要用多态,就必须使用指针。
9.为什么多态必须使用指针?
答:参考博客 https://www.cnblogs.com/yinheyi/p/10525543.html
10.工厂模式里面讲到:设计模式不是把变化消灭掉了,而是把变化限定到了一个局部位置。
工厂模式里面就是,类 MainForm 的整体看上去没有依赖任何具体类,他里面实用的都是抽象类。 抽象类A* a = 抽象类B对象指针->createA(); 其中 createA() 返回一个 抽象类A 的对象指针。我们通过在MainForm的构造函数(或者它的接口函数)传入一个B的具体子类指针,然后把该指针赋值给 抽象类B对象指针。这样这个B的具体子类并不在类 MainForm中定义创造,而是通过参数传进来,就保证了类MainForm中全部都是抽象的、稳定的。
李老师的代码为了突出重点,new之后,都没有规范写delete,但是我们实际开发一定要记得写delete。不想写就使用智能指针shared_ptr声明类别变量,然后使用make_shared进行初始化。
11.多态只对于虚函数来说。
对于类中的非虚函数,不能通过 把子类对象赋值给基类对象,或者 把子类指针赋值给基类指针的方式,即,假设子类Derived有一个func()普通成员函数,基类Base没有,不能通过Derived derived; Base base=derived; base.func()或者 Base *base= new Derived();,base->func();的方式来调用到子类的func非虚函数(普通成员函数)。
C++多态与设计模式
本文介绍C++中多态性的实现方式,包括使用虚函数、容器存储基类指针及子类对象等技巧,并探讨了单一职责、依赖倒置等原则。此外,还详细解释了工厂模式的应用场景与实现方法。
1087

被折叠的 条评论
为什么被折叠?



