当前搜索:

C++ 设计模式之抽象工厂模式

1、问题假设我们要开发一款游戏, 当然为了吸引更多的人玩, 游戏难度不能太大(让大家都没有信心了, 估计游戏也就没有前途了),但是也不能太简单(没有挑战性也不符合玩家的心理)。于是我们就可以采用这样一种处理策略: 为游戏设立等级,初级、中级、高级甚至有BT 级。假设也是过关的游戏, 每个关卡都有一...
阅读(14) 评论(0)

C++ 设计模式之工厂模式

上一篇博客写的简单工厂模式简单工厂模式的缺点是当新增产品的时候就要去修改工厂的类,这就违反了开放封闭原则,(类、模块、函数)可以扩展,但是不可以修改,于是,就出现了工厂方法模式。所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。打个比方现在有A、B两种产品,那么久开两个工...
阅读(5) 评论(0)

C++ 设计模式之简单工厂模式

1、简单工厂模式的设计思想首先将需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不...
阅读(72) 评论(0)

C++ 多继承、菱形继承、虚继承

先给大家看一下菱形继承的结构:D是多继承 有两个或两个以上的基类class A { public: A(int a = 0) :ma(a) { cout << "A" <&amp...
阅读(14) 评论(0)

C++ 继承与多态

1、继承的本质:代码的复用2、继承方式:public、protected、private        默认为private3、类与类的关系(1)组合:a part of/has a(2)继承:a kind of/is a(3)代理:容器适配器4、派生类继承了基类的什么?答:派生类继承了除基类的构...
阅读(106) 评论(0)

C++ 四种类型强转

C++的四种类型强转分别是const_cast、static_cast、dynamic_cast、reinterpret_cast一、const_cast  const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成c...
阅读(30) 评论(0)

写时拷贝实现String类

写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一(假装释放),直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时...
阅读(12) 评论(0)

单例模式的内存池

可以参照之前的两篇博客《普通内存池的实现》、《通用内存池的实现》单例模式的实现:(1)构造函数写在私有成员里面(2)有一个静态的成员函数用来生成一个唯一的对象代码实现:#include <iostream> using namespace std; c...
阅读(15) 评论(0)

通用内存池的实现

代码示例:#include<iostream> using namespace std; const int MEM_POOL_SIZE = 5; template<typename T> class ME...
阅读(18) 评论(0)

普通内存池的实现

内存池的实现:数据结构部分是用的静态链表                         类和模板实现代码示例:#include <iostream> using namespace std; const int MEM_POOL_SIZE = 10;...
阅读(13) 评论(0)

STL(标准模板库)概述

1、容器(1)顺序容器(2)vector        可以进行插入的操作:push_back(尾插)、insert(按位置插)(3)deque        可以进行插入的操作:push_back、push_front、insertvector和deque有[]运算符的重载函数,list没有,因...
阅读(14) 评论(0)

类模板的完全特例化和非完全特例化

有关类模板和函数模板的一些概念:1、函数模板不支持模板参数给默认值(C99标准),类模板支持参数给默认值。2、类模板有选择性实例化。3、类中部分函数特例化时,一定要提供成员方法的模板。4、成员方法的特例化不能在类外定义(语法不支持)。5、类模板不能进行模板的实参推演,实参推演只针对函数模板。6、出...
阅读(27) 评论(0)

用模板实现冒泡排序

代码实现:#include <iostream> using namespace std; #include <stdlib.h> //包含rand()的头文件 template<ty...
阅读(46) 评论(0)

C++中关于临时量和临时对象

一、临时量的生成1、内置类型产生的临时量:常量 不可更改2、自定义类型产生的临时量:变量 可以更改3、隐式产生的临时量:常量二、返回值1、返回内置类型的时候,产生的都是寄存器的立即数2、返回自定义类型的时候,也是通过寄存器返回的,但是用指针或者引用来接收返回值时,编译器会自动产生临时量3、返回对象...
阅读(69) 评论(0)

C++中String类的实现

要注意字符串是否为空代码实现:#include <iostream> using namespace std; #include <string.h> class CString { public: C...
阅读(34) 评论(0)

C++复数类的实现

代码实现:#include <iostream> using namespace std; class Complex { public: Complex(int real = 0,int image = 0) :mReal(real),mIma...
阅读(54) 评论(0)

C++运算符重载详解

一、为什么要运算符重载 C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的,但是大多时候我们需要对我们自己定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。 二、运算符重载的实质 实...
阅读(48) 评论(0)

Linux中select 、poll、epoll三者I/O复用的比较

前面我们讨论了select、poll、epoll三组I/O复用系统调用,这三个系统调用都可以同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返回值就是就绪文件描述符的数量,返回0表示没有事件发生。 1、select系统调用 s...
阅读(65) 评论(0)

C++STL迭代器

一、迭代器的概念 (1)迭代器类似于指针类型,它也提供了对对象的间接访问 (2)指针是C语言中就有的东西,而迭代器是C++中才有的 (3)迭代器提供一个对容器对象或者string对象访问的方法,并且定义了容器范围 二、关于迭代器 和指针不一样的是,获取迭代器不是使用取地址...
阅读(41) 评论(0)

Linux中fork系统调用的源码剖析

Linux中fork系统i调用的源码剖析 首先 先给大家看一张图 系统的看一下大概的fork的主要流程 上述图片中 最后eax寄存器置0 这个就是最后为什么子进程的返回值是0的理由 下面 就来浅谈一下 fork源码 long do_f...
阅读(47) 评论(0)
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1257
    排名: 4万+
    文章分类