
C++
文章平均质量分 59
ACERROR
去码头搞点薯条
展开
-
C++设计模式之桥接模式
桥接模式:将抽象部分与现实部分分离,使它们都可以独立变换。以下情形考虑使用桥接模式:1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。2.当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进来。3.当一个对象的多个变化因素可以动态变化的时候。优点:将实现抽离出来,再实现抽象,使得对象的具体实现依赖于抽象,满足了依赖倒转原则。更好的可扩展性。可动态的切换实现。桥接模式实现了抽象和实现的分离,在实现桥接模式时,就可以实现动态的选择具体的实现。原创 2021-11-04 11:28:32 · 447 阅读 · 0 评论 -
C++模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公司。库容器,比如迭代器和算法,都是泛型编程的例子,它们都是用了模板的概念。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如vector或vector.您可以使用模板来定义函数和类,接下来让我们一起来看看使用。函数模板//模板函数定义的一般形式如下所示:temlate <typename type> ret-type func-name(parameter原创 2021-11-02 16:14:17 · 221 阅读 · 0 评论 -
C++设计模式之模板方法模式
模板方法模式由两部分结构组成:抽象父类和具体的实现子类。通常在抽象父类中封装了子类的算法框架,也包括实现一些公共方法以及封装子类中所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。所以我们可以定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。当多个类有相同的方法,并且逻辑相同,只是细节上有差异时,可以考虑使用模板模式。具体的实现上可以将相同的核心算法设计为模板方法,具体的实现细节由子原创 2021-11-01 20:56:26 · 453 阅读 · 0 评论 -
C++设计模式之职责链模式
职责链模式职责链模式是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之前的耦合关系。在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这条链上传递,直到链上的某一个对象决定处理此请求。在公司中不同的岗位拥有不同的职责与权限。以上述的请假流程为例,当X请一天假的时候,只要组长审批就可以了,不需要流转到主管和总监。如果职责链上的某个环节无法处理当前的请求,若含有下个环节,则会把请求转交给下个环节来处理。职责链上的处理负责处理请求,客户只需要将请求发送到职责链上即可,原创 2021-10-29 16:44:32 · 288 阅读 · 0 评论 -
C++设计模式之策略模式
策略模式(Strategy Pattern)定义了一些列的算法,把它们一个个封装起来,并且使它们可以相互替换。策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活、可维护、可扩展。exp:一些主流的Web站点中,都提供了多种不同的登录方式。比如账号密码登录、手机验证码登录和第三方登录。为了方便维护不同的登录方式。这使得算法可以独立于它的客户端而变化,也就是说这些算法所完成的功能类型是一样的,对外接口也是一样的,只是不同的策略为引起环境角色表现出不同的行为。相比于使用大量的原创 2021-10-28 19:56:59 · 289 阅读 · 0 评论 -
C++设计模式之观察者模式和发布订阅模式
在软件工程中,设计模式(Design Pattern)是对软件设计普遍存在(反复出现)的各种问题,锁提出的解决防范。根据模式的目的来划分的话,GoF(Gang of Four) 设计模式可以分为以下三种类型:1.创建型模式:用来描述“如何创建对象”,它的主要特点是“将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者5种模式。2.结构型模式:用来描述如何将类或对象按照某种布局组成更大的结构。包括代理、适配器、侨接、装饰、外观、享元和组合7种模式。3.行为型模式:用来识别对象之间的常用原创 2021-10-15 20:09:59 · 2130 阅读 · 2 评论 -
C++设计模式之适配器模式
在软件工程中,设计模式(Design Pattern)是对软件设计普遍存在(反复出现)的各种问题,锁提出的解决防范。根据模式的目的来划分的话,GoF(Gang of Four) 设计模式可以分为以下三种类型:1.创建型模式:用来描述“如何创建对象”,它的主要特点是“将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者5种模式。2.结构型模式:用来描述如何将类或对象按照某种布局组成更大的结构。包括代理、适配器、侨接、装饰、外观、享元和组合7种模式。3.行为型模式:用来识别对象之间的常用原创 2021-10-15 15:33:40 · 363 阅读 · 0 评论 -
C++设计模式之单例模式
在软件工程中,设计模式(Design Pattern)是对软件设计普遍存在(反复出现)的各种问题,锁提出的解决防范。根据模式的目的来划分的话,GoF(Gang of Four) 设计模式可以分为以下三种类型:1.创建型模式:用来描述“如何创建对象”,它的主要特点是“将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者5种模式。2.结构型模式:用来描述如何将类或对象按照某种布局组成更大的结构。包括代理、适配器、侨接、装饰、外观、享元和组合7种模式。3.行为型模式:用来识别对象之间的常用原创 2021-10-14 17:10:17 · 141 阅读 · 0 评论 -
C++设计模式之工厂模式
在软件工程中,设计模式(Design Pattern)是对软件设计普遍存在(反复出现)的各种问题,锁提出的解决防范。根据模式的目的来划分的话,GoF(Gang of Four) 设计模式可以分为以下三种类型:1.创建型模式:用来描述“如何创建对象”,它的主要特点是“将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者5种模式。2.结构型模式:用来描述如何将类或对象按照某种布局组成更大的结构。包括代理、适配器、侨接、装饰、外观、享元和组合7种模式。3.行为型模式:用来识别对象之间的常用交原创 2021-10-13 21:16:32 · 439 阅读 · 0 评论 -
C++ 设计模式之建造者模式
在软件工程中,设计模式(Design Pattern)是对软件设计普遍存在(反复出现)的各种问题,锁提出的解决防范。根据模式的目的来划分的话,GoF(Gang of Four) 设计模式可以分为以下三种类型:1.创建型模式:用来描述“如何创建对象”,它的主要特点是“将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者5种模式。2.结构型模式:用来描述如何将类或对象按照某种布局组成更大的结构。包括代理、适配器、侨接、装饰、外观、享元和组合7种模式。3.行为型模式:用来识别对象之间的常用原创 2021-10-12 17:08:51 · 289 阅读 · 0 评论 -
inline函数
在C/C++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内部数据)的空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如函数的死循环滴贵调用的最终结果就是导致栈内存空间枯竭。#include <stdio.h>inline const char *num_check(int v) { return (v % 2 > 0) ? "原创 2021-09-28 20:28:32 · 180 阅读 · 0 评论 -
虚函数和纯虚函数
概念;定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。//exp:class A{ public: virtural void foo() { cout<<"A::fool() is caller"<<endl; }};classB:public A {原创 2021-09-27 15:18:06 · 159 阅读 · 0 评论 -
C++ 智能指针
C++ 程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。但使用普通指针,容易造成内存泄露(忘记释放)、二次释放、程序发生异常时内存泄露等问题等。所有 C++11 就引入了智能指针。原始指针容易发生内存泄漏C语言中最常使用的是malloc()函数分配内存,free()函数释放内存,而C++中对应的是new、delete关键字。malloc()只是分配了内存,而new则更进一步,不仅分配了内存,还调用了构造函数进行初始化;int main(){ // malloc返回原创 2021-09-02 20:04:09 · 212 阅读 · 0 评论 -
libcurl学习
libcurl是C语言开发的网络库,支持多种网络协议。libcurl是一个跨平台的开源网络协议库,支持http,https,rstp等多种协议。ibcurl同样支持HTTPS证书授权,HTTP POST,HTTP PUT,FTP上传,HTTP基本表单上传,代理,cookies,用户认证。Curl提供了一系列接口,可分为easy interface和multinterface,前者是阻塞的,后者可用于多线程,可做非阻塞应用。两者不是独立的,multi interface也依赖于easy interface原创 2021-08-06 17:14:35 · 765 阅读 · 0 评论 -
const 总结
const 是constant的缩写,本意是不变的,不易改变的意思,在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。C++ const允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编译器某值是保持不变,就应该明确使用const,这样可以获得编译器的帮助。一、const修饰普通类型的变量const int a = 8; //. a不能被修改二、const修饰指针变量const修饰指针变量有以下三种情况。A:const 修饰指原创 2021-05-27 16:05:34 · 165 阅读 · 0 评论 -
C++类 学习(一)
C++中的私有属性,只能在类的内部(或其友元)中访问。构造函数是一种特殊的函数(方法),在根据类创建对象时被调用。与函数一样,构造函数也可以重载。::被称作为作用域解析运算符。例如,Human::dateOfBirth指的是在Human类中声明的变量dateOfBirth,而::dateOfBirth表示全局作用域中的变量dateOfBirth。初始化成员的方式:构造函数、初始化列表。析构函数:每当对象不再在作用域内或通过delete被删除进而被销毁时,都将调用析构函数。这使得析构函数成为重置变原创 2021-04-27 21:19:59 · 160 阅读 · 0 评论 -
OC和C语言互相调用
注意事项:OC与C++对象在内存管理上是不一样的。所以我们无法直接将一个OC对象直接赋值给一个C++对象,或者相反。OC与C++都支持指针,可以通过指针进行桥接。例如在一个C++类中声名一个OC的指针。clang可以通过程序文件的后缀名选择不同的编译器对其进行编译。如文件后缀名是.m,它会使用OC编译器;如果是.mm,它会使用Object-C++编译器。OC调用C语言:// 方法一:c语言可以直接在OC的类中写方法:- (void)playvideobtn{ // 调用c语言方法:原创 2021-04-22 17:00:40 · 1309 阅读 · 0 评论 -
# const 和#define 的区别
const 和#define 的区别(1) 编译器处理方式不同 #define宏是在预处理阶段展开。 const常量是编译运行阶段使用。(2) 类型和安全检查不同 #define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类型,在编译阶段会执行类型检查。(3) 存储方式不同 #define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。) const常量会在内存中分配(可以是堆中也可以是栈中)。(4) co原创 2020-09-30 17:32:07 · 159 阅读 · 0 评论 -
C/C++解决宏定义冲突的问题
在C/C++程序中,如果A文件中有宏定义X,现在修改的文件中已经有宏定义X但是需要包含文件A,这个时候就会发生宏定义冲突。处理方法: 1.修改其中一个宏定义名称,但如果是大型项目工程的话不推荐,可能会引起其他问题。 2.#include "A"#ifdef X#undef X //取消宏定义#endif#define X //宏定义新的X...原创 2020-09-21 10:52:46 · 4520 阅读 · 0 评论 -
OC与C++之间的通信
OC = > C++1.把调用方的.m文件改成.mm文件2.引用C++头文件:#include "xxx.h" or#import "xxx.h"3.创建对象CppObject *cppObj = new CppObject();4.释放对象delete cppObj;C++=>OCC++调用OC就不是那么简单了,这里我们利用一个C函数做桥,将OC对象转化为void*类型的指针传入。ObjectOC类如下://ObjectOC.h#import "OBje原创 2020-09-18 20:53:43 · 514 阅读 · 0 评论 -
C/C++基础学习:整理static,入门STL,map,vector
C/C++中的static关键字.静态成员变量(oop).静态成员函数(oop).静态全局变量.静态局部变量.静态函数静态成员变量在类内的变量的声明前加上关键字static,该数据成员就是类内的静态数据成员。class Myclass{public: Myclass(int a,int b,int c); void GetSum();private: int a,b,c; static int Sum;//声明静态数据成员}; 特点: 1.静态成员变量是该类的所有原创 2020-09-18 20:41:29 · 575 阅读 · 0 评论