C++
李兰溪
好奇并探索着
展开
-
Effective Cpp 条例解析
Effective 条例解析Effective 条例解析一 让自己习惯C1 视C为一个语言联邦2 尽量以constenuminline 替换define3 尽可能使用const4 确保对象在使用前已经被初始化二构造析构赋值运算1 了解C默默编写并调用哪些函数2 如果不想使用编译器提供的函数应当明确拒绝3 为多态基类声明virtual析构函数4 别让异常逃离析构函数5 绝不在构造原创 2016-01-07 23:33:17 · 870 阅读 · 0 评论 -
Qt实现数字音频均衡器[文末附代码]
Qt实现数字音频均衡器在实现音频播放器的时候,我们常常需要一个均衡器来调节各个频段的增益,就是我们平常说的调重低音。一个数字均衡器的架构通常都如图所示:从图中可以看到,这里的数字均衡器实际上就是三个滤波器,各个滤波器分别负责不同频段的音频调节,这三个滤波器叫做滤波器组。当然一个数字滤波器组也不一定只有三个滤波器,理论上来说可以有任意多个滤波器,而且滤波器越多,能调整的也就越精细。从物理上来...原创 2018-12-16 22:49:31 · 3624 阅读 · 8 评论 -
重构手法之重新组织函数
重构手法之重新组织函数 在重构的手法中,很大的一部分是对函数进行整理,使函数能够恰当地包装代码(让代码自己说话而不是写更多的注释)。重新组织函数的驱动力,往往都是由于函数过长。因为函数过长就以为着包含了更多属性和逻辑,这样复杂的逻辑和诸多属性(如函数内部的局部变量或者静态变量等)会让代码变得难以维护,需要对其进行重新组织。提炼函数在冗长的函数中提炼出精小的函数,让每个短小函数负责的功能简洁,并原创 2016-08-05 13:54:42 · 414 阅读 · 0 评论 -
C++设计模式之装饰模式
C++设计模式之装饰模式 动态地给一个对象增加一些额外的职责,就增加对象的功能来说,装饰模式比生成子类更为灵活。装饰模式是一种对象结构模式。一、缘由我们常常通过继承的方式来对一个既有的类进行功能添加,但继承方式有显著的局限性,因为继承具有侵入性继承是一种is a的关系,具有强耦合性,难以复用代码。例如在窗口控件当中,要增加新的功能如增加滚动条,增加背景图片,通过继承的方式来增加新的功能,原创 2016-03-06 17:00:53 · 893 阅读 · 0 评论 -
C++设计模式之组合模式
C++设计模式之组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。C设计模式之组合模式一缘由二实现三实例代码一、缘由在自然界中常常存在着许多树形关系,例如公司的结构,有子公司,部门。又如文件系统的结构,目录下边有目录或者文件,而目录下的目录又有目录和文件,如此递归下去。而组合模式就是为了处理这种树形关系而存在的原创 2016-03-05 23:42:22 · 851 阅读 · 0 评论 -
C++设计模式之建造者模式
C++设计模式之建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。C设计模式之建造者模式一缘由二实现三代码分析四总结一、缘由当我们在构造一个窗口控件的时候,往往包含三个方面的初始化工作:UI初始化动画初始化信号槽初始化这样我们就可以构造好一个窗口控件了,我们可以看以下类图:乍一看该实现并没有什么问题CenterWidget类在其构造函数中调原创 2016-03-05 03:02:07 · 625 阅读 · 0 评论 -
C++设计模式之桥接模式
C++ 设计模式之桥接模式 将抽象部份与它的实现部份分离,使它们都可以独立地变化。C 设计模式之桥接模式一缘由二实现三代码四总结一、缘由假设现在需要大、中、小、三种型号的画笔来绘制7种不同的颜色,如果使用蜡笔,就需要准备 3*7 = 21支蜡笔。而如果使用毛笔,则只需要3支毛笔和7中颜料。显然使用毛笔的形式要比蜡笔简单许多,这其中缘由在于在蜡笔这个对象中型号和颜料两个不同维度的因素耦原创 2016-03-05 21:58:04 · 849 阅读 · 0 评论 -
C++设计模式之适配器模式
C++设计模式之适配器模式 将一个接口转换成客户希望的另一个接口使得接口不兼容的那些类可以一起工作C设计模式之适配器模式一缘由二实现三示例代码一、缘由适配器模式是我个人使用频率比较高的模式,十分简单实用。在许多情况下,我们自己的系统A,要使用既有对象B的接口,但无奈我们的既有系统A和B接口不兼容,这时候适配器可以帮我们解决这个问题。二、实现假设现在有一个函数static void req原创 2016-03-05 15:13:52 · 677 阅读 · 0 评论 -
C++设计模式之原型模式
C++设计模式之原型模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象C设计模式之原型模式一缘由二实现三代码分析一、缘由在许多环境下,我们需要从一个A对象生成一个B对象以减小A和B对象的重复代码,例如创建100个只有名字不同而其它信息都相同的Person类实例,这样就可以使用原型对象,从一个Person实例中构造其它99个实例,方便快捷。事实上C++的拷贝构造函数就可原创 2016-03-04 21:22:45 · 489 阅读 · 0 评论 -
C++设计模式之抽象工厂模式
C++设计模式之抽象工厂模式C设计模式之抽象工厂模式一缘由二实现三代码分析四总结一、缘由在《C++设计模式之工厂方法模式》一文中我们提到,由于简单工厂模式当中的工厂类职责过重,严重违反了单一职责的原则,导致系统扩展十分困难,于是引出了工厂方法模式,工厂方法模式引入抽象的工厂类,具体的创建工作推迟到每个具体的工厂类中,这样每个具体工厂类只负责一种产品的创建,这样每个具体工厂类的职责就足够单一,原创 2016-03-03 17:08:20 · 656 阅读 · 0 评论 -
C++设计模式之工厂方法模式
C++设计模式之工厂方法模式C设计模式之工厂方法模式一使用情景二实现三代码分析五总结一、使用情景简单工厂模式运用十分简便,但是正如《简单工厂模式》一文中所说的,简单工厂模式具有一个致命的缺点:拓展困难,只要增加新的具体类,就需要对工厂类进行修改,这一点严重违反了开闭原则。我们在思索如何能够实现增加新的产品而不至于修改已有的代码时,工厂方法模式应运而生。二、实现在简单工厂模式中,一个工厂类负责原创 2016-03-03 15:30:26 · 549 阅读 · 0 评论 -
C++设计模式之简单工厂模式
C++ 设计模式之简单工厂模式C 设计模式之简单工厂模式一使用情景二实现三代码分析五总结一、使用情景在许多情况下,我们需要创建一系列的类的实例,并且这些实例的创建过程都十分繁琐,这时候我们可以将这些类的创建过程都封装到一个工厂类中,由工厂类进行创建,从而屏蔽了创建的细节。 简单工厂的定义如下: 定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常都具有相同的父类。因原创 2016-03-03 00:28:32 · 664 阅读 · 0 评论 -
设计模式之初识UML图
C++设计模式之初识UML图C设计模式之初识UML图继承实现依赖关联一般关联聚合关联组合关联继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系 实现指的是一个class类实现了interface的功能;实现是类与接口之间最常见的关系。依赖类A使用到了类B,这种使用的关系是运行时的原创 2016-03-02 20:05:13 · 703 阅读 · 1 评论 -
单一职责和里氏替换
单一职责和里氏替换单一职责和里氏替换一单一职责原则1 原则解读2 例13 例2二里氏替换原则1 原则解读一、单一职责原则1.1 原则解读 原则定义:应该有且仅有一个原因引起类的变更,也可以说成是一个类只负责一件事情。该原则要求类的职责明确清晰,这样符合该原则的设计有如下好处:由于单个类只负责一件事情,职责清晰明确,类的复杂性降低单个类的复杂性降低,整体可读性提高可读性好,可维原创 2016-03-02 09:34:16 · 665 阅读 · 0 评论