自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

徐小小小hi的博客

徐小小小hi的博客

  • 博客(61)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++const对象、const成员变量、const成员函数

一、常对象1、数据成员值在对象的整个生存期内不能改变。在定义时必须初始化,而且不能被更新(因为成员变量不可以修改)。2、常对象,只能调用常成员函数,保证常对象的数据成员不被改变,不能调用非常成员函数,非常成员函数会修改成员变量。class Test{public: Test(int i) { x = i; }private: int x;};// 定义常对象const Test a(3); // 定义时,初始化二、常成员变量1、常数据成员,一经初始化就不可改变。

2022-01-20 15:12:24 917

原创 C++封装、继承和多态总结

通常用一个专门的抽象类作为封装的接口类来操作子类,抽象类不能实例化,只能指针操作子类的对象。 通过赋值,也就是接口的指针指向子类实例化对象的内存块。 编译器通过指针来访问成员变量,指针指向哪个对象就使用哪个对象的数据;编译器通过指针的类型来访问成员函数,指针属于哪个类的类型就使用哪个类的函数(多态除外,多态是通过查虚表来进行操作的)。例子如:class fat...

2020-03-23 15:25:13 686

原创 设计模式23--Interpreter模式(解释器模式)---行为型模式

一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统 中进行的操作。Interpreter 模式的目的就是使用一个解释器为用户提供一个一门定义语言的 语法表示的解释器,然后通过这个解释器来解释语言中的句子。 Interpreter 模式提供了这样的一个实现语法解释器的框架,笔者曾经也正在构建一个编 译系统 Visual CMCS,现在已经发布了 Vis...

2019-10-21 16:14:36 179

原创 设计模式22--Iterator模式(迭代器模式)---行为型模式

Iterator 模式应该是最为熟悉的模式了,最简单的证明就是我在实现 Composite 模式、 Flyweight 模式、Observer 模式中就直接用到了 STL 提供的 Iterator 来遍历 Vector 或者 List 数据结构。 Iterator 模式也正是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个 类中进行,这样就避免了暴露这个聚合...

2019-08-15 16:44:04 141

原创 设计模式21--Chain of Responsibility模式(职责链模式)---行为型模式

熟悉 VC/MFC 的都知道,VC 是“基于消息,事件驱动”,消息在 VC 开发中起着举足 轻重的作用。在 MFC 中,消息是通过一个向上递交的方式进行处理,例如一个 WM_COMMAND 消息的处理流程可能为:1) MDI 主窗口(CMDIFrameWnd)收到命令消息 WM_COMMAND,其 ID 位 ID_ ×××; 2) MDI 主窗口将消息传给当前活动的 MDI ...

2019-08-15 16:35:54 131

原创 设计模式20--Visitor模式(访问者模式)---行为型模式

在面向对象系统的开发和设计过程,经常会遇到一种情况就是需求变更(Requirement Changing),经常我们做好的一个设计、实现了一个系统原型,咱们的客户又会有了新的需 求。我们又因此不得不去修改已有的设计,最常见就是解决方案就是给已经设计、实现好的 类添加新的方法去实现客户新的需求,这样就陷入了设计变更的梦魇:不停地打补丁,其带 来的后果就是设计根本就不可能封闭、编译永远...

2019-08-15 16:28:40 193

原创 设计模式19--Command模式(命令模式)---行为型模式

Command 模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到 具体的 ConcreteCommand 类中(Receiver)中,从而实现调用操作的对象和操作的具体实现 者之间的解耦。 Command 模式结构图中,将请求的接收者(处理者)放到 Command 的具体子类 ConcreteCommand 中,当...

2019-08-15 16:19:29 159

原创 设计模式18--Mediator模式(中介者模式)---行为型模式

在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为 对象间的交互本身就是一种通信。在系统比较小的时候,可能对象间的通信不是很多、对象 也比较少,我们可以直接硬编码到各个对象的方法中。但是当系统规模变大,对象的量变引 起系统复杂度的急剧增加,对象间的通信也变得越来越复杂,这时候我们就要提供一个专门 处理对象间交互和通信的类,这个中介者就是 Mediator 模...

2019-08-15 15:35:10 128

原创 设计模式17--Memento模式(备忘录模式)---行为型模式

没有人想犯错误,但是没有人能够不犯错误。犯了错误一般只能改过,却很难改正(恢 复)。世界上没有后悔药,但是我们在进行软件系统的设计时候是要给用户后悔的权利(实 际上可能也是用户要求的权利:)),我们对一些关键性的操作肯定需要提供诸如撤销(Undo)的操作。那这个后悔药就是 Memento 模式提供的。 Memento 模式的关键就是要在不破坏封装行的前提下,捕获并保存...

2019-08-15 15:25:49 134

原创 设计模式16--Observer模式(观察者模式)---行为型模式

Observer 模式应该可以说是应用最多、影响最广的模式之一,因为 Observer 的一个实 例 Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC 实现了业务逻辑和表示层的解耦。个人也认为 Observer 模式是软件开发过程中必须要掌握 和使用的模式之一。在 MFC 中,Doc/View(文档视图结构)提供了实现 MVC ...

2019-08-15 15:17:08 154

原创 设计模式15--State模式(状态模式)---行为型模式

每个人、事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下 转移到下一个不同的状态(State)。最简单的一个生活中的例子就是:地铁入口处,如果你 放入正确的地铁票,门就会打开让你通过。在出口处也是验票,如果正确你就可以 ok,否 则就不让你通过(如果你动作野蛮,或许会有报警(Alarm),:))。 有限状态自动机(FSM)也是一个典型的状态不同,对...

2019-08-15 15:03:06 209

原创 设计模式14--Strategy模式(策略模式)---行为型模式

Strategy 模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算 法)具体实现和抽象接口之间的解耦。Strategy 模式将逻辑(算法)封装到一个类(Context) 里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口 的实现委托给组合对象实现。State 模式也有类似的功能,他们之间的区别将在讨论中给出。...

2019-08-15 14:53:30 169

原创 设计模式13--Template模式(模板方法模式)---行为型模式

在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑 (算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用 算法)是相同的。Template 提供了这种情况的一个实现框架。 Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并 定义好细节的接口,子类中实现细节。【注释 1】 【注释 ...

2019-08-15 14:41:05 150

原创 设计模式12--Proxy模式(代理模式)---结构型模式

至少在以下集中情况下可以用 Proxy 模式解决问题: 1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GoF 称之为虚代理(Virtual Proxy); 2)为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成,GoF 称之为远程代理(Remote...

2019-07-24 17:34:29 143

原创 设计模式11--Facade模式(外观模式)---结构型模式

举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去 n个地方办理 n 个手续(现在大学合并后就更加麻烦,因为可能那 n 个地方都隔的比较远)。但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的、到什么地方去办理我们都不感兴趣 实际上在软件系统开发中也经常回会遇到这样的情况,可能你实现了一些接口(模块),而这些接口(模...

2019-07-24 17:24:36 153

原创 设计模式10--Flyweight模式(享元模式)---结构型模式

在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000 次,而实际上我们可以让这一万个字母“a”共享一个对象,当...

2019-07-24 17:08:59 168

原创 设计模式9--Composite模式(组合模式)---结构型模式

在开发中,我们经常可能要递归构建树状的组合结构,Composite 模式则提供了很好的解决方案。//Component.h#pragma once#include <memory>class Component{public: Component(); virtual ~Component();public: virtual void Operation()...

2019-07-24 16:51:00 129

原创 设计模式8--Decorator模式(装饰模式)---结构型模式

在 OO 设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。通过继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。 而 Decorator 提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合。有关这...

2019-07-24 16:03:46 117

原创 设计模式7--Adapter模式(适配器模式)---结构型模式

Adapter 模式解决的问题在生活中经常会遇到:比如我们有一个 Team 为外界提供 S 类服务,但是我们 Team 里面没有能够完成此项人物的 member,然后我们得知有 A 可以完成这项服务(他把这项人物重新取了个名字叫 S’,并且他不对外公布他的具体实现)。为了保证我们对外的服务类别的一致性(提供 S 服务),我们有以下两种方式解决这个问题: 1)把 B...

2019-07-24 15:05:03 107

原创 设计模式6--Bridge模式(桥接模式)---结构型模式

总结面向对象实际上就两句话:一是松耦合(Coupling),二是高内聚(Cohesion)。面向对象系统追求的目标就是尽可能地提高系统模块内部的内聚(Cohesion)、尽可能降低模块间的耦合(Coupling)。然而这也是面向对象设计过程中最为难把握的部分,大家肯定在OO 系统的开发过程中遇到这样的问题:1)客户给了你一个需求,于是使用一个类来实现(A);2)客户需求变化,...

2019-07-23 16:00:15 177

原创 设计模式5--Prototype模式(原型模式)---创建型模式

Prototype 模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在 C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一。 Prototype 模式提供了一个通过已存在对象进行新对象创建的接口(Clone),Clone(...

2019-07-22 16:32:49 115

原创 设计模式4--Builder模式(建造者模式)---创建型模式

生活中有着很多的Builder的例子,个人觉得大学生活就是一个Builder模式的最好体验:要完成大学教育,一般将大学教育过程分成 4 个学期进行,因此没有学习可以看作是构建完整大学教育的一个部分构建过程,每个人经过这 4 年的(4 个阶段)构建过程得到的最后的结果不一样,因为可能在四个阶段的构建中引入了很多的参数(每个人的机会和际遇不完全相同)。 Builder 模式...

2019-07-22 16:19:48 189

原创 设计模式3--Singleton模式(单例模式)---创建型模式

Singleton 模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如 C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现了,可能这也正是很多公司在招聘 Java 开发人员时候...

2019-07-22 15:49:31 155

原创 设计模式2--AbstactFactory模式(抽象工厂模式)---创建型模式

假设我们要开发一款游戏,当然为了吸引更多的人玩,游戏难度不能太大(让大家都没有信心了,估计游戏也就没有前途了),但是也不能太简单(没有挑战性也不符合玩家的心理)。于是我们就可以采用这样一种处理策略:为游戏设立等级,初级、中级、高级甚至有BT 级。假设也是过关的游戏,每个关卡都有一些怪物(monster)守着,玩家要把这些怪物干掉才可以过关。作为开发者,我们就不得不创建怪物的类,然...

2019-07-22 15:41:15 156

原创 设计模式1--Factory模式(工厂方法模式)---创建型模式

在面向对象系统设计中经常可以遇到以下的两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码。这里带来两个...

2019-07-22 14:48:24 139

转载 c++ const 全面总结!

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用 如下表所示:  二、Const的使用 1、定义常量 (1)const修饰变量,以下两种定义形式...

2018-12-11 14:03:45 124 2

原创 关于重写和重定义

重写、重定义和继承完全是两个概念,比如析构函数:能被派生类重写,来实现多态,可以方便的用指向基类的指针释放派生类的对象,不能被继承,因为举个例子,派生类和基类有不同的成员,如果基类的默认析构函数是从基类继承的话,那么派生类在析构时就有内存空间不能被释放的问题存在了,所以析构函数是不能被继承的。“继承”是一整套的机制,是对类而言的。对一个成员函数说能否被继承,容易引起语言上的概念混淆(至少各人的理解...

2018-05-22 16:12:16 3550

转载 C++重载机制

原文地址:http://huqunxing.site/2016/09/08/C++%E9%87%8D%E8%BD%BD%E6%9C%BA%E5%88%B6/C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。本篇博客主要介绍C++中函数重载机制和运算符重载机制。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(...

2018-05-22 15:36:19 1397

转载 C++ 三大特性之多态

原文地址:http://huqunxing.site/2016/09/08/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E5%A4%9A%E6%80%81/C++ 的三大特性,封装,继承,多态。封装可以使得代码模块化,继承可以扩展已存在的代码,而多态的目的则是为了接口重用。本篇博客主要介绍C++中多态的相关概念及使用方法。概念多态(Pol...

2018-05-22 15:34:13 154

转载 C++ 三大特性之继承

原文地址:http://huqunxing.site/2016/09/12/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E7%BB%A7%E6%89%BF/本篇博客主要介绍C++的继承机制,系统的介绍了在 C ++ 中继承的概念、基本使用方法、三种继承方式、多继承、二义性、虚基类、构造函数与析构函数等相关知识。基本概念继承: 类的继承,就...

2018-05-22 15:33:10 177

转载 C++ 三大特性之封装

本篇博客主要介绍C++ 的封装机制。在本篇博客中,简单介绍了封装的相关概念以及在C++ 中实现封装的基本手段。什么是封装?封装: 封装可以隐藏实现细节,使得代码模块化封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。数据抽象数据抽象是指,只向外界提供关键信息...

2018-05-22 15:31:50 1331

原创 子类继承父类成员问题

    子类不能从父类继承的有:       1. 构造函数       2. 拷贝构造函数       3. 析构函数    子类能从父类继承的有:         1、静态成员变量       2、静态成员函数       3、友元函数        4、赋值操作符=重载函数而private类型成员是可以被子类继承的,只不过子类不能直接访问,需要相应的set/get函数。class fathe...

2018-05-21 15:15:00 1263

原创 一些编码格式的字符串转换

string CStringHelper::Unicode2UTF8(const wstring& strUnicode){ int length = ::WideCharToMultiByte(CP_UTF8, 0, strUnicode.c_str(), -1, NULL, 0, NULL, NULL); if (length <= 0) return ""; char* pText

2016-11-24 19:19:00 427

原创 string->WCHAR*

string newMd5str = md5.toString(); 1 LPCWSTR result = (LPCTSTR)(_bstr_t)newMd5str.c_str(); 2 std::wstring stemp = Str2Wstr(newMd5str); LPCWSTR result = stemp.c_str(); std::wstring Str2Wstr(const

2016-09-06 13:35:07 386

转载 Ubuntu12编译FreeRDP

http://blog.csdn.net/liuyifeng_510/article/details/9833197原流程:1. 安装Ubuntu12.04.1桌面版;2. sudo apt-get install git3. git clone git://github.com/FreeRDP/FreeRDP.git4. cd FreeRDP    (可以先备份)5.

2016-06-02 16:08:24 460

转载 OpenGL ES系列 之 基本-1:初始化EGL

OpenGL ES是一个平台中立的图形库,在它能够工作之前,需要与一个实际的窗口系统关联起来,这与OpenGL是一样的。但不一样的是,这部份工作有标准,这个标准就是EGL。而OpenGL时代在不同平台上有不同的机制以关联窗口系统,在Windows上是wgl,在X-Window上是xgl,在Apple OS上是agl等。EGL的工作方式和部份术语都接近于xgl。OpenGL ES的初始化过程

2016-05-31 17:43:24 520

转载 EGL接口介绍(转)

嵌入式要像阿甘一直向前奔跑!IT博客 |首页 |发新随笔 |发新文章 |联系 |聚合 | 管理随笔:234文章:154评论:282引用:0EGL接口介绍(转)EGL 是 OpenGL ES 和底层 Native 平台视窗系统之间的接口。本章主要讲述 OpenGL ES 的

2016-05-31 17:41:50 585

原创 Qt的paint函数重写,以及QPaint给一条线绘制箭头

直接代码: QPainter *painter; static const double Pi = 3.14159265358979323846264338327950288419717; static double TwoPi = 2.0 * Pi;QLineF line(sourcePoint,destPoint); if (qFuzzyCompare(line

2016-05-25 10:11:12 5357 2

原创 Qt下给QGraphicsScene绘制网格背景方法

直接上代码: QPolygonF myPolygon1; myPolygon1 << QPointF(0,10) << QPointF(20,10); QPolygonF myPolygon2; myPolygon2 << QPointF(10,0) << QPointF(10,20); QPixmap pixmap(20, 20); pixmap.

2016-05-25 09:51:29 10578 1

原创 条款1---C++尽量用const,inline,enum等代替#define

对于宏定义是发生在预处理的阶段,会出现许多预想不到的失误。所以:1、对于单纯的常量最好采用const对象或enums替换2、对于行似函数的宏定义采用inline替换通常我们需要声明一个类的成员数组,然而并不能直接的在类里面声明:class test{ int scores[100];}以上是错误的写法。1、可以:class test{ static con

2016-05-24 17:47:18 376

c++线程池操作

c++编写的线程池

2016-12-15

Qt流程图绘制

图层的操作,旋转放大等,图元的添加移动等以及图元之间的连线。流程图的绘制。

2016-05-20

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除