C/C++
小胖七少爷
不积硅步无以至千里
不积小流无以成江海
展开
-
再谈GOF设计模式的设计原则
GOF设计原则原创 2022-08-01 16:06:52 · 519 阅读 · 0 评论 -
函数调用的几种方式:__cdecl、__stdcall、__fastcall、__thiscall、__clrcall、__vectorcall
调用约束,__cdecl/__stdcall/__fastcall原创 2022-07-31 05:11:43 · 1844 阅读 · 0 评论 -
not1|not2和bind1st|bind2nd详解
not1、not2、bind1st、bind2nd原创 2022-07-28 10:13:17 · 1055 阅读 · 0 评论 -
C++内建函数对象
C++内建函数对象原创 2022-07-27 23:23:06 · 394 阅读 · 0 评论 -
unary_function和binary_function详解
unary_function和binary_function原创 2022-07-27 22:55:52 · 1081 阅读 · 0 评论 -
类和函数的泛化、偏特化和全特化
类模板的泛化、偏特化和全特化原创 2022-07-27 12:52:37 · 780 阅读 · 0 评论 -
字符数组和字符串指针表示字符串的区别
字符数组和字符串指针原创 2022-07-26 14:24:59 · 300 阅读 · 0 评论 -
Array、Vector、Deque、List区别
STL常见容器对比原创 2022-07-26 09:30:41 · 407 阅读 · 0 评论 -
变量模型及使用场景
变量模型及使用场景原创 2022-07-26 09:14:05 · 449 阅读 · 0 评论 -
绝对不要以多态方式处理数组
多态方式处理数组原创 2022-07-25 22:57:01 · 190 阅读 · 0 评论 -
指针pointer和引用reference区别
引用和指针的区别原创 2022-07-25 16:22:58 · 539 阅读 · 0 评论 -
浅谈static_cast、dynamic_cast、const_cast、reinterpret_cast用法
类型强制转换原创 2022-07-21 17:24:19 · 1622 阅读 · 1 评论 -
GOF23种设计模式C++版本
GOF设计模式,C++实现原创 2022-07-19 11:25:36 · 1158 阅读 · 0 评论 -
关于字符变量内存地址
C++关于使用cout输出字符地址原创 2022-07-13 18:05:07 · 293 阅读 · 0 评论 -
各种构造函数:无参构造函数、带参构造函数、复制(拷贝)构造函数、赋值构造函数、移动构造函数、移动赋值构造函数...
C++构造函数原创 2022-07-13 14:35:31 · 259 阅读 · 0 评论 -
设计模式之Visitor访问者模式
1. 抽象类1.1. 访问者class Apple;class Pork;class Visitor{public: virtual ~Visitor() = default; virtual void visit(Apple* apple) = 0; virtual void visit(Pork* pork) = 0;protected: Visitor() = default;};1.2. 元素//Element(抽象元素)class Element{pu原创 2021-11-03 16:43:10 · 144 阅读 · 0 评论 -
设计模式之Iterator迭代器模式
1. 抽象类1.1. Iterator(抽象迭代器)//Iterator(抽象迭代器)class Iterator{public: virtual ~Iterator() = default; virtual void nextChannel() = 0; virtual void preChannel() = 0; virtual void chooseChannel(int idx) = 0; virtual int getChannel() = 0;protected:原创 2021-11-02 17:31:08 · 87 阅读 · 0 评论 -
设计模式之Mediator模式
1. 抽象一个同事类和中介者类1.1. 同事类//Colleague(抽象同事类)class AbstractChatRoom;class Member{public: explicit Member(const std::string &name) { m_pChatRoom = nullptr; m_imageSize = 0; this->m_sName = name; } std::string getName() { return thi原创 2021-11-02 14:09:05 · 138 阅读 · 0 评论 -
设计模式之Observer观察者模式
1. Observer(观察者)class Observer{public: virtual ~Observer() = default; virtual void update() = 0;protected: Observer() = default;};2. Subject(目标)class Blog{public: virtual ~Blog() = default; void attach(Observer *observer) { m_O原创 2021-11-01 14:49:40 · 90 阅读 · 0 评论 -
GCJ-02和BD-09互转、GCJ-02和WGS-84互转
/*** GCJ02 转换为 WGS84* @param lng* @param lat* @returns {*[]}*/struct Point { double lon; double lat;};double x_PI = 3.14159265358979324 * 3000.0 / 180.0;double PI = 3.1415926535897932384626;double a = 6378245.0;double ee = 0.006693421622965.原创 2021-11-01 11:21:09 · 1038 阅读 · 0 评论 -
设计模式之State状态模式
1.环境类来负责状态之间的转换1.1. State(抽象状态类)class State{public: virtual ~State() = default; virtual void display() = 0;protected: State() = default;private:};1.2.ConcreteState(具体状态类)class NormalState : public State{public: NormalState() { s..原创 2021-10-29 14:14:52 · 205 阅读 · 0 评论 -
设计模式之ChainOfResponsibility职责链模式
模拟不同金额票据需要不同级别的领导审批流程:金额0 ~ 10万含:Teamleader可处理,金额10 ~ 20万含: Supervisor可处理,金额20 ~ 50万含: Manager可处理,金额50 ~ 100万含: Boss可处理,金额超过100万,无人处理,模拟缺点:请求没有一个明确的接收者,就不能保证它一定会被处理。Handler(抽象处理者):AbstractHandlerConcreteHandler(具体处理者):Teamleader、Supervisor、Manager、原创 2021-10-29 10:49:24 · 196 阅读 · 0 评论 -
设计模式之Command命令模式
1. 命令接收者//灯class Lamp{public: Lamp() { m_bLampState = false; std::cout << "Lamp 构造函数" << std::endl; } ~Lamp() { std::cout << "Lamp 析构函数" << std::endl; } void switchLampOn() { m_bLampState = true; std::cout &原创 2021-10-28 18:06:40 · 127 阅读 · 0 评论 -
设计模式之Strategy策略模式
1. Strategy(抽象策略)class Sort{public: virtual ~Sort() = default; virtual void sort(int arr[], int len) = 0;protected: Sort() = default;};2. ConcreteStrategy(具体策略类)//冒泡排序class BubbleSort : public Sort{public: BubbleSort() { std::cout &原创 2021-10-27 17:05:31 · 86 阅读 · 0 评论 -
设计模式之Template Method模板方法模式
1. AbstractClass(抽象类):OnlineMall网购class OnlineMall{public: virtual ~OnlineMall() = default; //算法的流程框架 void shopping() { selectProduct(); //选商品 addShoppingCart(); //加购物车 payment(); //付款 }prote...原创 2021-10-27 16:23:46 · 108 阅读 · 0 评论 -
设计模式之Component组合模式
1. 透明组合模式1.1.Component(抽象构建)class AbstractFile{public: virtual ~AbstractFile() = default; virtual void add(AbstractFile *file) = 0; virtual void remove(AbstractFile *file) = 0; virtual void killVirus() = 0;protected: AbstractFile() = default;.原创 2021-10-14 16:45:03 · 492 阅读 · 0 评论 -
C++ std::function的用法
类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1, …,TN的N个...原创 2021-10-13 13:47:53 · 1417 阅读 · 0 评论 -
函数指针与指针函数、数组指针与指针数组、类模板与模板类、函数模板与模板函数的区别
1. 函数指针与指针函数函数指针的重点是指针。表示的是一个指针,它指向的是一个函数,例子: int (*pf)(); 指针函数的重点是函数。表示的是一个函数,它的返回值是指针。例子: int* fun(); 2. 数组指针与指针数组数组指针的重点是指针。表示的是一个指针,它指向的是一个数组,例子: int (*pa)[8]; 指针数组的重点是数组。表示的是一个数组,它包含的元素是指针。例子; int* ap[8];...原创 2021-10-12 17:32:04 · 116 阅读 · 0 评论 -
设计模式之Flyweight享元模式
1. UnsharedConcreteFlyweight(非共享具体享元类)//UnsharedConcreteFlyweight(非共享具体享元类):坐标class Coordinates{public: Coordinates(int x,int y) { this->m_iX = x; this->m_iY = y; std::cout << "Coordinates 构造函数,X = " << x << " Y = " &l原创 2021-10-12 16:37:34 · 108 阅读 · 0 评论 -
设计模式之Facade外观模式
1. 子系统角色 SubSystem(子系统角色):主板、内存、CPU、硬盘、操作系统 //SubSystem(子系统角色)//主板class Motherboard{public: Motherboard() { std::cout << "Motherboard 构造函数" << std::endl; } ~Motherboard() { std::cout << "~Motherboard 析构函数" << std:原创 2021-10-11 17:45:36 · 121 阅读 · 0 评论 -
设计模式之Decorator装饰器模式
1. 构建类1.1. Component(抽象构建)//Component(抽象构建)class HandPancake{public: virtual ~HandPancake() = default; virtual std::string offerHandPancake() = 0; //制作手抓饼 virtual float calcPrice() = 0; //计算价格protected: HandPancake() = default;};1.2. Con原创 2021-10-11 16:09:51 · 81 阅读 · 0 评论 -
设计模式之Bridge桥接模式
1. 实现类1.1. Implementor(实现类接口)//Implementor(实现类接口)class Color{public: virtual ~Color() = default; virtual void fillColor() = 0;private:};1.2. ConcreteImplementor(具体实现类),Red,Green,Blue//ConcreteImplementor(具体实现类),Red,Green,Blueclass Red原创 2021-10-11 13:48:52 · 191 阅读 · 0 评论 -
设计模式之Adapter适配器模式
1.定义Adapter适配者类和目标抽象类1.1. Adapter适配者类class FilterAdapter_A{public: FilterAdapter_A() { std::cout << "FilterAdapter_A 构造函数" << std::endl; m_sType = "FilterAdapter_A"; } ~FilterAdapter_A() { std::cout << "FilterAdapter_A原创 2021-10-09 18:20:53 · 175 阅读 · 0 评论 -
C++设计模式
https://blog.csdn.net/leacock1991/category_10688843.htmlhttps://blog.csdn.net/weixin_44718794/category_10206608.html原创 2021-10-09 15:38:00 · 78 阅读 · 0 评论 -
设计模式之Proxy代理模式
1. 远程代理/** 第一种代理模式:远程代理*(情景:小明喜欢小红,但是害羞不好意思表白。小明通过中间代理人小丽,把礼物送给小红,表达自己对小红的爱意)*/Subject抽象主题角色//实现一个抽象的女孩类class Girl{public: Girl(char* name = "") :m_name(name) { } char* getName() { return m_name; }private: char* m_name;};//实现一.原创 2021-09-28 17:50:05 · 124 阅读 · 0 评论 -
设计模式之Builder建造者模式
1. 模式结构1.1. 角色抽象建造者(AbstractBuilder):创建一个Product对象的各个部件指定的抽象接口;一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。具体建造者(ConcreteBuilder):实现AbstractBuilder的接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。产品角色(Product):被构建的复原创 2021-09-23 18:30:36 · 124 阅读 · 0 评论 -
设计模式之Builder建造者模式
1. 模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。该模式的主要优点如下:封装性好,构建和表示分离。 扩展性好,各个具体的建造者相互独立,有利于系统的解耦。 客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其...原创 2021-09-23 14:59:25 · 90 阅读 · 0 评论 -
设计模式之AbstractFactory抽象工厂模式
前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,图 1 所示的是海尔工厂和 TCL原创 2021-09-23 14:34:45 · 130 阅读 · 0 评论 -
设计模式之工厂模式(简单工厂、工厂方法和抽象工厂对比)
1. 工厂模式对比 简单工厂模式 工厂方法模式 抽象工厂模式 1 工厂:产品 = 1:N 工厂:产品 = 1:1 工厂:产品 = 1:N 2 一个工厂类 一个抽象产品类,多个具体产品类 一个抽象工厂类,多个具体工厂类 一个抽象产品类,多个具体产品类 一个抽象工厂类,多个具体工厂类 一个抽象产品类,多个具体产品类 3 一个工厂生产所有种产品 .原创 2021-09-23 11:45:03 · 713 阅读 · 0 评论 -
设计模式之FactoryMethod工厂方法模式
在《简单工厂模式》一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。缺点:类的个数容易过多,增加复杂度原创 2021-09-23 10:42:56 · 187 阅读 · 0 评论