持续更新中…

1.有个通用的使用多态、虚函数 的方法:
  • 1.定义一个容器,其中的元素类型是基类,在容器中存入不同子类类型的指针。
  • 2.不同子类中定义自己的接口虚函数。
  • 3.当遍历该容器时,会根据该容器中的不同类型自动调用不同子类的接口函数。

2.如果增加一个需求 或者 更改一个需求很频繁时候

做法是

  • 1.先定义一个基类Base_A,在这个基类定义公共的一个接口虚函数 Func()
  • 2.再定义子类 Derived_BDerived_C 继承于这个基类 Base_A,在子类 Derived_BDerived_C 中去具体实现这个需求的虚函数接口Func()
  • 3.在另一个类Class_C中定义一个容器(以vector容器为例)std::vector<Base_A*> Vct,通过在容器Vct增加或者修改要使用的具体子类类型 Derived_BDerived_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++】29.设计模式总结相关推荐

  1. 【c++】24.std::function和std::bind详解

    1. 可调用对象 查看全文 http://www.taodudu.cc/news/show-494578.html 相关文章: [c++]26.浅谈"事件驱动".select.po ...

  2. 【自动驾驶】2.车载以太网 - SOME/IP简介

    车载以太网 - SOME/IP简介 SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是车载以太网通信引入的一个概念,位于OSI 7层模型的 ...

  3. BAT 面试Java技术问题总结

    2019独角兽企业重金招聘Python工程师标准>>> 前言 此文总结一些校招常见面试题目,供应届生或者实习生参考学习,题目太多,所以只做问题总结,不做答案 PS:此文只是总结技术问 ...

  4. java 学习思路_Java的学习思路

    1 开发环境Java SDK 下载和安装 2 jvm 虚拟机运行原理 3 编程基础 标识符命名规范 4 Java数据类型 5 运算符 6 分支语句(if,switch) 7 循环语句(for,whil ...

  5. 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言

    [文末有福利] Python的热度一直高居不下,运维,自动化测试,后端开发,机器学习...Python的用武之地真的太多了! "人生苦短,我用Python",对于普通职场人士来说, ...

  6. 清华学霸用3年编写的Python学习清单共26章,学完托福雅思轻松拿

    首先,你了解Python吗? Python是一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言.由于具有丰富和强大的库,又被称为胶水语言,Python 极其容易上手,主要源于Python有极其简 ...

  7. 清华教授花费1年总结python学习路线共26章,学会它offer拿到手软

    首先,你了解python吗? Python是一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言.由于具有丰富和强大的库,又被称为胶水语言,Python 极其容易上手,主要源于Python有极其简 ...

  8. Vue之Hello World!

    目录 1.简介 1.1.Vue介绍 1.2.什么是MVVM模型 1.3.Vue相关 1.4.帮助文档 1.5.VUE GitHub 2.安装 2.1.管理员启动cmd,执行npm install vu ...

  9. 学python必须得英语精通吗_Python无用武之地?只能说你是真的没有精通Python语言(附教程)...

    Python的热度一直高居不下,运维,自动化测试,后端开发,机器学习...Python的用武之地真的太多了! "人生苦短,我用Python",对于普通职场人士来说,Python简单 ...

最新文章

  1. .net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
  2. python argvparser_Python命令行参数argv和argparse该如何使用
  3. 【机器学习基础】前置知识(四):一文掌握Pandas用法
  4. 法国时隔20年再折桂!“网易云信:世界杯巅峰决战之夜”活动圆满结束!
  5. python连接linux堡垒机_利用Python Paramiko开发linux堡垒机
  6. linux 文件 重命名 缓存,linux – rename()原子性和NFS?
  7. 获取目录文件.bat
  8. TOP计划猿10最佳实践文章
  9. numpy—np.repeat、np.roll
  10. MapReduce在Map端的Combiner和在Reduce端的Partitioner
  11. 将idea maven项目中webapp文件夹的改为Web Root
  12. 07 Anykey图像优化及文字头像生成与加载
  13. iOS接入招商银行一网通
  14. 我的世界服务器物品展示怎么得,我的世界物品展示框详解攻略 物品展示框怎么做...
  15. csgo调出参数_CSGO参数设置
  16. 大陆汽车:汽车电子电器架构的发展及其对车载以太网的影响
  17. ios 提醒事项和快捷指令,实现进度条功能
  18. 你知道这几种常用的电阻测试方法吗?2021-08-23
  19. python 图片生成视频 moviepy_MoviePy
  20. VUE+element-ui微信充值支付

热门文章

  1. 一步一步打造Geek风格的技术博客
  2. 多台Linux服务器SSH相互访问无需密码--转
  3. 李宏毅深度学习——分类
  4. 【图数据库】Window下的安装Neo4j
  5. 人脸识别之insightface开源代码使用:训练、验证、测试(4)
  6. 效率达CPU一万倍、内含800万神经元:英特尔发布神经形态芯片超算
  7. CAFFE学习笔记(一)Caffe_Example之训练mnist
  8. Logistic回归总结
  9. 沪港通:利好出尽就是利空
  10. CSS基础_Day02