自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

doubleintfloat的博客

记录与分享技术成长道路上的点滴

  • 博客(79)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 代理模式-Python

通俗说就是,加一个中间层,中介from abc import abstractmethod, ABC'''送礼物抽象接口类'''class GiveGift(ABC): @abstractmethod def give_dolls(self): pass @abstractmethod def give_flowers(self): pass @abstractmethod def give_chocolate(.

2021-03-02 20:19:11 191

原创 简单工厂模式和策略模式的区别

学习了设计模式就会发现,简单工厂模式和策略模式的UML几乎是一样的,那两者的却别到底是什么呢,搜集资料,加上个人理解整理如下:1、简单工厂模式中只管创建实例,具体怎么使用工厂实例由调用方决定,他只负责创建具体对象;2、策略模式是将生成实例的使用策略放在策略类中配置后才提供调用方使用。3、 简单工厂模式调用方可以直接调用工厂实例的方法属性等;4、策略模式不能直接调用实例的方法属性,需要在策略类中封装策略后调用。总结来说就是简单工厂模式–》创建对象 策略模式–》封装策略(算法)..

2021-03-01 23:06:03 228

原创 策略模式-Python

import sys#现金收费抽象类class CashSuper(object): def accept_cash(self,money): pass#正常收费子类class CashNormal(CashSuper): def accept_cash(self,money): return money#打折收费子类class CashRebate(CashSuper): def __init__(self,discount=1):

2021-03-01 22:37:58 209 1

原创 C++拷贝构造函数为何不能传值,必须传指针或者引用

先看以下简单地代码:#include<iostream>using namespace std;class A{public: A(){}//构造函数 A(A p_a)//错误的拷贝构造函数 { m1 = p_a.m1; } A(A&p_a)//正确的拷贝构造函数 { m1 = p_a.m1; }private: int m1;};int main(void){ A a1; A a2(a1);//调用拷贝构造函数,来创建a2}

2021-02-23 22:01:24 272

原创 内联函数、构造函数、静态成员函数为何不能为虚函数

1、因为有虚函数的类对象必有虚函数指针(vfptr),虚函数指针指向虚函数表(vftable),因为内联函数无地址,所以不能为虚函数;2、有虚函数指针,必须要先有对象,若对象不存在,则vfptr必定不存在,若连构造函数还没调用,则必没有对象,就是说必须先有构造函数,才有对象,所以构造函数不能为虚函数;3、虚函数表指针属于类对象,而静态成员函数属于类,不依赖于类对象,所以静态成员函数也不能为虚函数;...

2021-02-19 20:10:41 247

原创 python单例模式

超级简单入门python单例模式import osclass Watch(object): __instance=None #定义一个类属性做判断 def __new__(cls): if cls.__instance==None: #如果__instance为空证明是第一次创建实例 #通过父类的__new__(cls)创建实例 cls.__instance=object.__new__(c

2021-02-19 19:35:58 232

原创 Python获取文件行数

import osm_count=0def Startcount(p_str_filename): global m_count print(p_str_filename) f = open(p_str_filename, 'rb') m = f.readlines() m_line = len(m) print(p_str_filename , " 文件行数 " , m_line) m_count+=m_line pri

2021-02-04 23:24:59 338 2

原创 为什么父类析构函数必须为虚函数

为什么父类析构函数必须为虚函数在这里先说答案,后面详细解释1、如果父类的析构函数不是虚函数,则不会触发动态绑定(多态),结果就是只会调用父类的析构函数,而不会调用子类的析构函数,从而可能导致子类的内存泄漏(如果子类析构函数中存在free delete 等释放内存操作时);2、如果父类的析构函数是虚函数,则子类的析构函数一定是虚函数(即使是子类的析构函数不加virtual,这是C++的语法规则),则会在父类指针或引用指向一个子类时,触发动态绑定(多态),析构实例化对象时,若是子类则会执行子类的析构函数

2020-12-14 22:21:14 750

原创 C++获取成员变量的偏移地址

#include<iostream>#include<list>#include<string>#include<vector>using namespace std;class base{public: int m_i1; char m_c1; char m_c2; char m_c3;};#define GET(A , m) (int)(&((A*)0)->m)int main(){ cout<&

2020-12-13 10:39:53 636 1

原创 C++多态详解(1)

C++多态详解要学习C++多态,那么要先了解多态这个词在C++里面是什么意思:简单来说就是:试图用不变的代码或者函数来实现不同的算法,比如重载、模板、虚函数;多态又分为静态多态和动态多态,静态多态指的是在编译阶段就确定下来的内容,比如函数的重载 , 而动态多态指的是在运行时才能决定的事情,比如虚函数;本文作者将尽自己最大的努力,争取能把C++的多态讲的详细一点,抛砖引玉,希望新加入C++大家庭的同学有所收获。静态多态静态多态指的是在编译阶段就确定下来的内容,比如函数的重载 ,这个来说相对简单一些,

2020-12-12 21:29:16 500

原创 享元模式(19)

享元模式运用共享技术有效地支持大量细粒度的对象。

2020-12-07 22:53:49 480

原创 备忘录模式(18)

备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。学习这个设计模式,突然想到英雄联盟里的一个英雄,时间刺客艾克(百度百科)时间刺客·艾克是MOBA竞技网游《英雄联盟》第125位英雄。艾克是一个叛逆而又聪明的坏小子,同时也是一个天不怕地不怕的小神童,靠着自己的发明创造混迹于祖安的黑暗街道。在游戏中艾克是一个擅于长期作战的强力游击型刺客,可以凭借自己的高机动性以及减速和击晕等控制技能将敌人撕成碎片。如果他在战斗当中处于

2020-12-04 23:00:14 522

原创 组合模式(17)

#include<iostream>#include<list>#include<string>using namespace std;//将对象组合成树形结构以表示“部分-整体”的层次结构。//组合模式使得用户对单个对象和组合对象的使用具有一致性class Company{public: Company(string name) { m_name = name; } virtual ~Company(){} virtual void Add(C.

2020-12-02 22:19:41 505

原创 原型模式(16)

原型模式用原型指定创建对象的种类,并且通过拷贝这些原型创建新的对象其关键点在于clone函数,调用clone函数来创建更多相同类型的对象#include<iostream>#include<list>using namespace std;//将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化//父类 Resume:简历class Resume { protected: char *name;//有指针类型,防止浅拷贝public

2020-12-01 22:52:12 480

原创 工厂模式(21)

工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使类的实例化延迟到子类。定义一个用于创建对象的接口:在虚工厂基类提供一个接口,用于创建产品接口;让子类决定实例化哪一个类:产品虚基类提供一个创建产品的接口,具体实例化要子类实现。#include<iostream>#include <assert.h>using namespace std;//手机class PHONE{public: virtual void ReadImei(){}/

2020-12-01 22:02:59 539

原创 抽象工厂模式(22)

抽象工厂模式提供一个创建一系列相关或者相互依赖的接口,而无须指定他们具体的类。对比工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。抽象工厂和工厂都是创建接口,只是抽象工厂创建的接口多而已。...

2020-12-01 22:00:55 511

原创 二十三、命令模式

命令模式命令模式是一个比较难理解的模式,我看了好久、查阅了很多博客,根据我自己的理解记录如下:命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化举例子:一个餐厅有广东厨师负责烧广东菜、四川厨师负责烧四川菜,一个服务员负责点菜、传菜;那么他的整个运行流程是这样的,服务员记录客人点的菜----》通知后厨师傅开始做菜–》后厨师傅开始做自己负责的菜。代码如下:其核心就是这个流程:整个运行流程是这样的,服务员记录客人点的菜----》通知后厨师傅开始做菜–》后厨师傅开始做自己负责的菜

2020-11-30 21:25:05 484

原创 道阻且长之C++对象模型

前言本系列博客参考狂想老师网易云课程和其《C++新经典 对象模型》,《深度探索C++对象模型》;强烈推荐想在C++领域进阶的同学进行深入的学习

2020-11-26 00:26:51 530

原创 四、观察者模式

观察者模式观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同事监听同一主题对象,当这个主题对象发生变化时,能够通知到所有观察者,使他们能够自动更新自己

2020-11-20 16:55:29 517

原创 二、设计模式的基本原则

设计模式的基本原则1、单一职责原则定义:就一个类而言,应该只有一个引起该类变化的原因。一个类只有一个职责,如果职责过多,代码就会臃肿,可读性更差,也更难以维护,主要体现面向对象的高内聚低耦合。2、开闭原则(Open Close Principle)定义:软件实体(类、模块、函数)应该可以扩展,但是不可修改。开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码。3、依赖倒转原则(Dependence Inversion Principle)定义:高层模块不

2020-11-16 22:05:28 530

原创 设计模式-前言

设计模式1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。其实就是软件开发过程中的套路,参考这些前辈总结的套路能够大大提高我们的开发效率和开发质量。...

2020-11-16 20:05:08 489

原创 五、状态模式

状态模式允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类,(State Pattern)是设计模式的一种,属于行为模式。定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。模式中的角色1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,

2020-11-13 14:55:02 505

原创 八、桥接模式

一般问题:一个类需要在两个以上维度扩展,采用继承方式会导致子类数量过多核心方案:将抽象部分与实现部分分离,使其都可以独立变化设计意图:桥接模式不是将两个不相干的类链接,而是将一个需要多维度变化的类拆分成抽象部分和实现部分,并且在抽象层对两者做组合关联,是用组合的方式来解决继承的问题。举个例子,如果一个类在两个维度分别有m和n种变化,采用继承的方式就需要扩展出m*n个子类,且一个维度每增加一种变化就多出另一个维度变化总数的子类;如果将两个维度拆分再组合,加起来也只有m+n个子类,且每个维度独立扩展,一个维

2020-11-12 14:22:20 550

原创 const在函数前后的意义

const在函数前后的意义一、const在函数后面1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错);2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this 是被const修饰,那this所指向的类对象的成员都是不允许被修改的;(备注:有人认为const修饰的是this指针,那么不能改变的就是this指针本身,而不是this指针指向的成员,其实这个const修饰的是this和(*this),下面代码有详细解释,tis指针的实

2020-10-27 20:34:25 589

转载 FALSE/TRUE与false/true的区别

FALSE/TRUE与false/true的区别1.FALSE/TRUE与false/true的区别:false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define定义的INT数据,主要用途是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif也就是说FALSE/TRUE是int类型,而fa

2020-07-07 13:14:44 655

原创 成员函数初始化列表

1、何时必须用成员初始化列表a)如果这个成员是个引用b)如果是个const类型成员c)如果你这个类是继承一个基类,并且基类中有构造函数,这个构造函数里边还有参数。d)如果你的成员变量类型是某个类类型,而这个类的构造函数带参数时;2、使用初始化列表的优势(提高效率)除了必须用初始化列表的场合,我们用初始化列表还有什么其他目的? 有,就是提高程序运行效率。对于类类型成员变量xobj放到初始化列表中能够比较明显的看到效率的提升但是如果是个简单类型的成员变量 比如 int m_test,其实放在初

2020-05-20 20:00:43 863

转载 C++类默认函数

在C++中,一个类有八个默认函数:默认构造函数;默认拷贝构造函数;默认析构函数;默认重载赋值运算符函数;默认重载取址运算符函数;默认重载取址运算符const函数;默认移动构造函数(C++11);默认重载移动赋值操作符函数(C++11)。  只是声明一个空类,不做任何事情的话,编译器会自动为你生成一个默认构造函数、一个默认拷贝构造函数、一个默认重载赋值操作符函数和一个默认析构函数。这些函数只有在第一次被调用时,才会被编译器创建,当然这几个生成的默认函数的实现就是什么都不做。所有这些函数都是

2020-05-16 14:38:24 579

原创 静态成员函数和非静态成员函数的区别

静态成员函数和非成员函数的区别从知乎上看到一个问题,看得我怀疑人生,咬牙切齿,如下图:对于面试官的解释,把我整蒙圈了;于是自己写代码验证如下:#include<iostream>using namespace std;class A{public: static int func1() { cout << "11" << endl; return 0; } void func2() { cout << "MM" <

2020-05-15 22:15:35 717

原创 C++类对象的大小(1)

类的大小计算的时候,只包括:1 类的非静态成员数据的类型大小之和.2 如果有虚函数的话,还要加上指向虚函数的指针(vptr)大小3 边缘调整(字节对齐)后的大小4 与类中的构造函数,析构函数以及其他的成员函数无关....

2020-05-15 14:00:18 612

转载 王爽汇编语言第三版答案

转载自 https://blog.csdn.net/modiz/article/details/88776695 部分加上自己的分析,感谢 Modiz汇编语言答案(王爽)检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。(2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。(3)1KB的存储器可以存储 8192(2^13) ...

2020-03-03 00:10:47 1102

转载 一、UML图

转载自:http://www.uml.org.cn/oobject/201905073.asp 感谢感谢作者;为了方便自己记忆模糊时查看举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法。首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为...

2020-02-27 21:20:06 508

原创 策略模式

#include<iostream>using namespace std;//基算法类class Base_cash{public: virtual void cash() {};};class cash_1 :public Base_cash{public: void cash() { cout << "cash_1" << ...

2019-05-13 23:55:50 563

原创 九、简单工厂模式

简单工厂模式C++简单工厂模式,是一种实例化对象的方式,根据自身实际情况来实例化自己需要的对象,可以通过工厂类来实例化自己需要的类。工厂类是创造类,负责创建实例,父类的方法为虚函数,子类继承父类方法,重新实现。根据C++多态的特性实例化一个对象,在对象进行调用函数时,会动态的绑定调用子类重新实现的函数。UML图如下:C++代码如下:#include<iostream>usi...

2019-04-27 11:37:10 661

转载 InvokeRequired和Invoke

C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它。此时它将会在内部调用new MethodInvoker(LoadGlobalImage)来完成下面的步骤,这个做法保证了控件的安全,你可以这样理解,有人想找你借钱,他可以直接在你的钱包中拿,这样太不安全,因此必须让别人先要告...

2019-01-24 21:29:55 605

原创 十、中介者模式

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使得对象不需要相互的引用,从而使其耦合松散,可以独立的改变他们之间的交互。#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;class Country;//抽象类 联合国class UN{public: virtual void delcar...

2019-01-20 19:05:00 561

原创 十一、职责链模式

#include&amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;gt;using namespace std;//请求class request{public: string type;//类型 int count;//数量 string content;//内容public: request(string m_type, int len ,string...

2019-01-20 16:21:23 586

原创 十二、备忘录模式

#include&lt;iostream&gt;using namespace std;//状态存储箱class Roleststemento{public: int attack; int defends;public: Roleststemento(int m_attc, int m_defends):attack(m_attc),defends(m_defends){}...

2019-01-19 16:23:13 558

原创 十三、适配器模式

#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;//抽象球员类class player{ protected: string m_name;public: player(string str_name):m_name(str_name){} virtual void attack(){}; v...

2019-01-19 15:19:29 558

转载 谷歌代码规范

英文版:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml中文版:http://zh-google-styleguide.readthedocs.org/en/latest/google-cpp-styleguide/google c++ 编码规范:http://blog.csdn.net/xiexievv/articl...

2019-01-19 14:49:42 9329 1

原创 十四、建造者模式

#include&lt;iostream&gt;#include&lt;list&gt;#include&lt;string&gt;using namespace std;class product{ list&lt;string&gt;ls;public: void add(string m_str) { ls.push_back(m_str); } void sh...

2019-01-17 20:27:20 546

Linux程序设计第四版

这是我自己平时看的一本书,分享给有需要的人,希望可以帮到大家

2018-03-01

sharedptr引用计数

发表于 2020-10-22 最后回复 2020-10-22

空空如也

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

TA关注的人 TA的粉丝

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