C++设计模式04-——装饰设计模式 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。——— 百度百科主体(被装饰者)饰品(装饰)比如:定做的奶油蛋糕,蛋糕是主体,而蛋糕的外包装、丝带、花朵都是饰品。在某些情况下我们可能会"过度地使用继承来扩展对象的功能",由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。...
C++设计模式03-——观察者设计模式 观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主体是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。何为观察者?我们说的观察者,是一件事情的围观者。对于这件事情的主人翁,制造这件事情的发布者;对于围观者来说,他们就是观察者或者称为订阅者。在设计模式中,外界的变化是造成耦合的重要原因,有时候为了降低耦合,就必须抵御变化。......
C++设计模式02-——策略设计模式 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)策略——普通语境下,是我们对一件事情的处理方法,由于对不同的事情我们有不同的应对方式,我们通过权衡利弊,得到合适的方案,这个过程就是挑选策略。在面向对象编程中,对于某类事务,有着不同的处理方式,将这些方式向上抽象一层就有了策略模式。这里并不是说一般的处理方式不能完成任务,而是我们的代码是面对变化的需求的,我们要让代码简单方便维护,所以才需要此类设计模式。.........
C++设计模式01-——模板设计模式 TemplateMethod模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是TemplateMethod的典型应用。在具体实现方面,被TemplateMethod调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。......
C++设计模式00——元篇 设计模式(英语designpattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由ErichGamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。本系列均采用伪代码的形式,代码来源为李建忠老师的设计模式课程。🤞🤞🤞。......
华为云数据库可视化软件DataStudio导入excel表格问题 华为云数据库可视化软件DataStudio导入excel表格问题文章目录华为云数据库可视化软件DataStudio导入excel表格问题1. 操作成功会有消息弹窗,操作不成功,无论是什么原因,都是没有反应2. 导致操作不成功的因素2.1 非excel表格因素2.2 excel表格因素如图,需求是将excel文件中的数据导入数据库中1. 操作成功会有消息弹窗,操作不成功,无论是什么原因,都是没有反应 如果有excel格式有误 或者 数据不符合数据库要求,会
“QMYSQL driver not loaded“ 但有驱动模块 Qt:有驱动模块但 QMYSQL driver not loaded 如何确定自己有没有驱动模块Q?bool MainWindow::isConnectedDB(){ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("car"); db.setUserName("root"); db.setPa
关于MySQL + Navicat + Qt的故障小结 关于MySQL + Navicat + Qt的故障小结文章目录关于MySQL + Navicat + Qt的故障小结1. 缺少`MySQL`驱动的问题:2. 安装了`MySQL`驱动仍然不能在Qt程序中使用MySQL数据库3. 在navicat连接不上MySQL数据库的问题(加密规则不同导致):4. 关于net指令的使用5. MySQL链接不上报错1. 缺少MySQL驱动的问题:通过64位编译器(我用的是mingw730-64bit),将qt目录下的D:\QT\5.14.2\Src\qtbase\s
Qt项目中出现的问题小结 Qt项目中出现的问题小结 写在前面: 总结这个星期自学Qt踩过的一些坑,并不包含所有问题,仅仅是基于自己所做的小界面而言文章目录Qt项目中出现的问题小结1. Qt中文乱码2. 关于Qt调用vs编译的dll控件3. 关于动态链接库导出类与函数的使用4. 关于动态链接库隐式调用的两种操作5. VS+Qt(拓展)打不开xxx.ui文件6. 关于自定义控件的提升7. 关于按钮形状、颜色的设定8. 子窗口的移动问题9. 关于封装而引起的事件响应问题10. 关于Qt的绘图问题11. 关于Qt
C++初步之核心编程篇五:多态与虚函数类 C++初步之核心编程篇五:多态与虚函数类文章目录C++初步之核心编程篇五:多态与虚函数类1. 多态的概要2. 多态案例一-计算器类3. 纯虚函数和抽象类4. 多态案例二-制作饮品5. 虚析构和纯虚析构6. 多态案例三-电脑组装1. 多态的概要 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 下面的实例中,基类 Shap
C++初步之核心编程篇二:函数与运算符重载 C++初步之核心编程篇二:重载文章目录C++初步之核心编程篇二:重载一、函数重载二、运算符重载1、加、减号2、左、右移运算符3、 前、后自增运算符4、赋值运算符5、关系判断(小于号)一、函数重载 对于函数来说,重载定义如下: 函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。 函数重载的满足条件:同一个作用域下函数名相同
静态链接库(.lib)和动态链接库(.dll)的使用 静态链接库(.lib)和动态链接库(.dll)的使用文章目录静态链接库(.lib)和动态链接库(.dll)的使用一、静态链接库1. 静态链接库概述2. 创建静态链接库3. 调用静态链接库二、动态链接库(dynamic linking library)1. 动态链接库概述2. 创建动态链接库并导出函数导出函数两种方式1. 用.def文件导出2. __declspec(dllexport)关键字导出3. 从工程中导入dll中的函数导入函数两种方式1. 隐式链接2. 显式链接注--------本文所有测试均以
C++初步之核心编程篇三:命名空间与模板 C++初步之核心编程篇三:命名空间与模板文章目录C++初步之核心编程篇三:命名空间与模板一、命名空间(namespace)1. 概述2. 使用二、C++模板(template)1. 函数2. 类一、命名空间(namespace)1. 概述命名空间,可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。 在标准命名空间中存在很多函数,如std::cin,std::cout,std::sort()…,
C++初步之核心编程篇一:类与封装 C++初步之核心编程篇一:类与封装文章目录C++初步之核心编程篇一:类与封装内容目录:00 封装的意义01 访问权限02 struct与class的区别03 初始设计案例04 构造、析构函数1. 构造函数2. 析构函数05 初始化列表06 类对象作为类成员07 静态成员、函数08 this指针与空指针调用成员函数09 常函数与常对象1. 常函数2. 常对象10 友元友元的三种方式内容目录:00 封装的意义 将属性和行为作为一个整体表现生活中的事物将属性和行为写在一起来表现事物
前缀和与差分 前缀和与差分文章目录前缀和与差分一、前缀和1.1 一维前缀和1.2 二维前缀和二、差分2.1 一维差分2.2 二维差分一、前缀和 1.1 一维前缀和一维前缀和是解决连续区间和查询问题的有效技巧,给定长度为n的数组,对于给定的m个询问,每个询问给出一个区间[l, r],求区间内元素的总和。1 ≤ n, m ≤ 1000001 \ {\leq} \ n, \ m \ {\leq} \ 1000001 ≤ n,&
求组合数的方法 求组合数文章目录求组合数一、求组合数之一二、求组合数之二三、求组合数之三一、求组合数之一给定nnn组询问,每组询问给定两个整数a,ba, ba,b,请你输出Cabmod(109+7)C^b_amod(10^9+7)Cabmod(109+7)的值。数据范围:1≤n≤100001 ≤ n ≤ 100001≤n≤100001≤b≤a≤20001≤ b ≤ a ≤ 20001≤b≤a≤2000思路:动态规划核心:状态转移方程这里的状态转移方程也就是组合数的一个公式,是递推式:
单调栈与单调队列 单调栈与单调队列文章目录单调栈与单调队列一、单调栈二、单调队列一、单调栈 单调栈解决什么问题?情况1:给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如没有则输出-1。同样的,也可以改成"输出每个数左边第一个比它大的数"情况2:给定一个长度为 N 的整数数列,输出每个数左边第一个比它大的数,如没有则输出-1。这种题目就需要用到单调栈,第一个是单调增栈,第二个是单调减栈。情况1代码:#include <iostream>#include &l
二叉排序树和AVL树 二叉排序树和AVL树文章目录二叉排序树和AVL树一、二叉排序树1. 理论定义(1)、什么是二叉排序树(2)、简单介绍二叉排序树2. 模拟画图3. 要点分析4. 代码实现(1)、定义结构体:(2)、插入新节点:(3)、层序遍历:(4)、中序遍历:中序遍历二叉排序树可得到有序序列(5)、完整代码:二、AVL树1. 理论定义2. 模拟旋转3. 代码实现引言:本文视频链接全部来自bilibili,因为是在bilibili大学上学qwq一、二叉排序树1. 理论定义(1)、什么是二叉排序树
二叉树小结 二叉树小结文章目录二叉树小结基础准备:结点信息与先序建二叉树一、二叉树的遍历1. 先序遍历1.1 递归1.2 非递归2. 中序遍历2.1 递归2.2 非递归3. 后序遍历3.1 递归3.2 非递归4. 层序遍历二、二叉树深度三、统计二叉树结点1. 统计所有结点数2. 统计度为0的结点数3. 统计度为1的结点数四、复制二叉树五、删除二叉树基础准备:结点信息与先序建二叉树typedef struct TreeNode{ char ch; struct TreeNode* lchild, * rchi