自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 设计模式:Factory Method

工厂方法-Factory Method动机-Motivation在软件系统中,经常面临创建对象的工作,由于需求的变化,需要创建的对象的具体类型也经常变化。例子文件分割器代码class ISplitter{public: virtual void split()=0; virtual ~ISplitter(){}};class BinarySplitter : public ISplitter{ };class TxtSplitter: public ISpl

2020-05-29 14:03:54 104

原创 设计模式:Bridge

Bridge-桥模式由于某些类型的固有实现逻辑,使得类型具有多个变化维度。考虑这个例子,需要实现通信设计。设置有Message类型,有Login、SendMessage、SendPicture,以及PlaySound、DrawShape、WriteText、Connect。平台支持方面,需要支持PC平台设计,同时需要支持Mobile平台设计。平台间的差异在于播放声音、图形绘制、写入文本、链接网络等功能的不同,考虑实现PC、Mobile继承Message,并重写上述功能函数。之后,需求需要实现平台

2020-05-29 12:45:28 213

原创 设计模式:Decorator

Decorator-装饰模式装饰模式用于处理,软件组件设计中的责任划分不清晰,导致子类通过继承得到大量的冗余重复代码,代码的急剧膨胀问题。装饰模式关键在于划清责任。考虑设计一个IO库、相关流操作。其中有文件流,网络流、内存流等,操作有对流的加密,缓存等。考虑设计一个Stream抽象基类,FileStream、NetWorkStream、MemoryStream继承与Stream基类。而加密操作需要加密具体的流,而不是抽象上的流,所以继承自FileStream、NetWorkStream、Memory

2020-05-29 12:12:50 192

原创 设计模式:Observer/Event

Observer/Event-观察者模式在软件构建过程中,我们可能需要为某些对象建立通知依赖关系,当一个对象的状态发生改变,所有的依赖对象(观察者)都将得到通知。如下例子,考虑实现一个文件分割器,需要将文件分割进度通过某种控件显示出来。class MainForm : public Form{ TextBox* txtFilePath; TextBox* txtFileNumber; ProgressBar* progressBar;public: void Button1_Click(

2020-05-28 13:25:14 154

原创 设计模式:Strategy

Strategy-策略模式税务计算根据不同国家的税率进行不同算法计算enum TaxBase { CN_Tax, US_Tax, DE_Tax, FR_Tax //更改};class SalesOrder{ TaxBase tax;public: double CalculateTax(){ //... if (tax == CN_Tax){ //CN***********

2020-05-28 12:45:51 124

原创 设计模式:Template Method

Template Method在程序的开发过程中可以将开发者分为类库开发人员和应用程序开发人员。一般情况下,由类库开发人员实现基本功能函数,再有应用程序开发人员使用类库实现逻辑组装,考虑如下例子。//程序库开发人员class Library{public: void Step1(){ //... } void Step3(){ //... } void Step5(){ //... }};//应用程序开发人员class Applicat

2020-05-28 10:58:30 85

原创 数据结构:单链表

#include<iostream>#include<random>#define ERROR 0#define OK 1using namespace std;//节点定义typedef int ElemType;typedef int Status;typedef struct Node { ElemType data;//data域 Node* next;//指针域}Node;typedef Node* LinkList;//定义LinkList

2020-05-19 16:15:24 139

原创 数据结构:线性表

#include<iostream>using namespace std;#define MAXSIZE 5#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0//状态信息typedef int Status;//存储返回信息typedef int ElemType;//线性表结构体定义 struct SqList{ int data[MAXSIZE];//data数组 i

2020-05-19 15:06:48 157

原创 读书笔记:Windows核心编程 字符和字符串处理

字符编码一、单字节 ANSI二、双字节 DBCS三、windows平台下字符编码windows Vista使用Unicode-16 双字节编码,支持使用代理扩展至32位4个字节,描述少数使用16位不够的字符。在简化代码与节省空间上做了折衷的处理。.NET Framework始终使用Unicode-16编码所有字符和字符串。所以在开发Windwos应用程序时,使用unicode-16编码可以改进性能和较少内存消耗。UTF的其他标准UTF-8:将某些字符编码为单字节、某些字符编码为双字节、某些字符

2020-05-11 11:17:25 302

原创 读书笔记-Windows核心编程:错误处理

常见的Windows函数返回值数据类型当windwos 检测到错误时,会使用一种叫线程本地存储区的机制。其作用是将错误代码与"主调线程’"关联。是不同线程间互不干扰对方错误代码,使得各个线程独立运行。当错误产生时,windows函数会返回一个已发生错误,可以使用GetLastError函数,查询上一个函数调用设置的线程的32位错误代码。<WinError.h>包含了定义的错误代码列表,可以通过查看源码得到。错误的基本表示方式有,一个消息ID、一个消息文本、和一个标号。当错误产生是

2020-05-10 13:49:56 182

原创 算法:欧几里得法求最大公约数

算法实现int gcd(int p,int q){if(q==0)return p;int r=p%q;return gcd(q,r);}测试

2020-05-06 15:12:18 421

原创 C++泛化设计与函数式编程

本篇有关C++函数式编程的弹性设计。C++支持五种编程形式,过程,面向对象,函数式,泛型,元编程。本篇不过多介绍C++语法,希望各位对于函数式编程的知识标准库function(调用形式)lambda表达式函数函数指针bind参数绑定重载了函数调用运算符的类有基本的认识与了解。...

2020-02-05 17:19:18 1015

原创 C++ pure virtual,impure virtual,non-virtual函数关于继承的实际意义

区分接口继承和实现继承本篇主要讨论pure virtual函数(纯虚函数),impure virtual函数(虚函数),以及non-virtual函数(非虚函数)的实际意义.概念上通过public继承,实际上可以分为函数接口继承(function interfaces)和函数实现继承(funcion implementations).考虑下面这个例子class Shape{public:...

2020-02-02 21:43:33 495

原创 C++ Strive for exception-safe code

前言:本篇有关于C++异常安全性,但对异常安全性的讨论并不只限制于C/C++语言.首先我们可以先来分析一下下面的代码class PrettyMenu{public: ... //改变背景图像 void changeBackground(std::istream& imgSrc); ...private: //互斥器 Mutex mutex; //目前的背景图像 I...

2020-02-01 20:27:54 1044

原创 C++STL std::swap

有如下两个类 当前需要交换两个Widget对象class WidgetImpl{public:private:int a,b,c;std::vector<double>v;};class Widge{public:Widget(const Widget& rhs);Widget& operator=(const Widget& rhs){...

2020-01-30 14:58:16 1124

空空如也

空空如也

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

TA关注的人

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