- 博客(44)
- 资源 (9)
- 收藏
- 关注
原创 指向函数的指针数组
创建指向函数的指针数组,为了选择一个函数,只需使用数组的下标。然后间接引用这个指针。这种方式支持表格式驱动码(table-driven code)的概念;可以根据状态变量(或状态变量的组合值)去选择被执行函数,而不用条件语句或case语句。这种设计方式对于经常要从表中添加或删除函数(或者想动态的创建或改变表)十分有用。下面的例子使用预处理宏创建了一些哑函数,然后使用自动集合初始
2016-01-08 11:53:47
1089
原创 工厂模式:封装对象的创建(三、抽象工厂)
抽象工厂(Abstract Factory)模式看起来和前面的工厂方法很相似,只是它使用若干工厂方法(Factory Method)模式。每个工厂方法模式创建一个不同类型的对象。用户界面当创建一个工厂对象时,要决定将如何使用那个工厂创建的所有对象。实现各种图形(GUI)的可移植性:创建一个合适于正在使用的GUI的工厂对象,然后它将根据对它发出的对一个菜单、按钮或者滚动条等的请求自动
2015-12-09 10:18:02
785
原创 工厂模式:封装对象的创建(二、多态工厂)
在上篇中,静态成员函数 static Shape* factory(const string& type) 迫使所有创建对象的操作都集中在一个地方,因此这个地方就是唯一需要修改代码的地方。这是一个合理的决解方法,因为它完美的封装了对象的创建过程。但是工厂方法模式——可以使不同类型的的工厂派生自基本类型的工厂。工厂方法事实上就是多态工厂模式的一个特例。所以下面例子是——工厂方法模式做为
2015-12-07 15:28:10
614
原创 工厂模式:封装对象的创建(一、在基类中定义一个静态成员函数)
当我们发现需要添加新的类型到一个系统中时,最明智的首要步骤就是用多态机制为这些新类型创建一个共同的接口。用这种方法可以将系统中多余的代码与新添加的特定类型的代码分开。新类型的添加并不会搅乱已存在的代码...或者至少看上去如此。起初它似乎只需要在继承新类的地方修改代码,但这并非完全正确,仍须创建对象,在创建对象的地方必须指定要使用的准确的构造函数。因此,如果创建对象的代码遍布整个应用的程
2015-12-07 10:59:52
1622
原创 c++ 单例模式的浅谈
面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,但是采用全局或者静态变量的方式,会影响封装性,难以保证别的代码不会对全局变量造成影响。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。//Singleton.h#ifndef _SINGLETON_H_#define
2015-11-30 10:40:52
392
原创 cctype 中的字符函数
cctype 中的字符函数 c语言中在 #include 文件中 c++ 在 #include 中函数名称 返回值isalnum() 如果参数是字母数字,即字母或者数字,函数返回trueisalpha
2015-11-27 23:42:54
863
原创 C++ 拷贝构造函数和赋值构造函数机制详解
一、首先我们必须知道什么时候要重写拷贝构造函数和赋值函数如果类的对象中包含指针,指向动态分配的内存资源,一般都要重写拷贝构造函数和赋值函数例如下面的类:class Example{public: Example(){pBuffer=NULL; nSize=0;} ~Example(){delete pBuffer;} void Init(int n){ pBuf
2015-11-16 14:40:54
2161
原创 c++ 枚举的定义、设置值、取值范围
c++的 enum 工具提供了另一种创建符号常量的方式,这种方式可以代替 const。他还允许定义新类型,但必须按严格的限制进行。使用enum 的用法与使用结构相似。例如,请看下面的语句:emun spectrum{red,orange,yellow,gree,blue,violet,indigo,ultraviolet};这条语句完成两项工作。1、 让spectrum成
2015-11-14 21:58:01
14115
7
原创 vi 编辑器常用命令
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复f
2015-11-12 09:44:09
475
原创 解析UML类图符号的含义
类图基本符号可拆分为虚线,箭头,实线,空心右三角,实心右三角,空心菱形和实心菱形。由这些基本的图形进行组合构成了类图的基本符号。这里要注意这几个符号的顺序,代表了类与类之间关系的耦合程度。越向右耦合度越高。 其中虚线+箭头是表示即依赖的关系,实线+箭头表示关联的关系,虚线+空心右三角表示implements,实线+空心右三角表示的是泛化,即类的继承关系。实线+空心菱形表示的
2015-11-11 17:21:35
1984
转载 C语言字符串操作总结大全(超详细)
转载 http://www.jb51.net/article/37410.htm1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 str
2015-11-03 10:07:14
455
原创 如何判断大端小端
端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian
2015-11-03 09:57:08
584
原创 数据结构的字节对齐
struct student{char name[5];int num;short score;}|char|char|char|char||char|----|----|----||--------int--------||--short--|---------|======================struct student
2015-10-23 15:31:31
2144
原创 VC6 实现GBK到UTF8编码转换(c++)
#include #include #include #include using namespace std; string GBKToUTF8(const std::string& strGBK) { string strOutUTF8 = ""; WCHAR * str1; int n =
2015-10-23 15:23:32
3355
原创 linux c utf8和GBK 的转换函数
方法一:使用如下两个函数 mbstowcs将多字节编码转换为宽字节编码 wcstombs将宽字节编码转换为多字节编码 注意, 需要系统编码的支持, 可以通过locale -a 查看系统支持的。若不支持zh_CN.gbk, 需要安装,#include #include #include #include #include #include
2015-10-23 15:14:17
10169
原创 Unicode UTF-8 GBK UCS 解析
1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英
2015-10-23 10:36:37
760
转载 C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组 fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream - 打开文件供读写 文件打开模式: ios::in 读ios::out
2015-07-20 10:02:43
2205
原创 C语言文件操作函数大全
fopen(打开文件)相关函数 open,fclose表头文件 #include定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该
2015-07-04 00:49:56
844
原创 内存空洞
堆内存释放,是从堆顶开始。那么如果堆中间的一块区域,大部分内存都释放了,堆顶还有一些会怎么样呢?我们来看个例子:#include #include #include #include int main(){char *p[11];int i;for(i=0;i{p[i]=(char *)malloc(1024*2);strcpy(p[i],"12
2015-04-13 15:53:25
3737
原创 进程运行时,所占用的内存
一个进程运行时,所占用的内存,可以分为如下几个部分:1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS 回收。3、全局变量、静态变量:初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。4、文字常量:常量
2015-04-13 15:41:25
1346
原创 gcc/g++ 命令的常用选项
gcc/g++ 命令的常用选项格式(选项 解释)-o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out.-c 只编译生成目标文件,不链接-m486 针对 486 进行代码优化。 -O0 不进行优化处理。-O 或 -O1 优化生成代码。-O2 进一步优化。-O3 比 -O2 更进一步优化,包括 inline 函
2015-03-17 17:08:32
1131
原创 socket 代码学习
/*简单的网络编程实例。该实例是一个客户端程序,它首先连接到一个标准时间服务器上,从服务器读取当前时间,然后显示时间。*/#include #include #include #include #include #include #include #define HOSTNAMELEN 40#define BUFLEN 1024#define PORT 13
2015-03-16 17:25:49
879
原创 socket 学习(代码)
Socket 编程一、 基本知识主机字节序和网络字节序主机字节序即内存中存储字节的方法有:1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址网络字序表示网络协议在处理多字节时的顺序,一律为big endian主机字节序和网络字节序转换的函数:#include uint16_t htons(uint16_
2015-03-16 17:13:04
734
原创 C语言数据类型打印对应的占位符
占位符列表char %c和%hhdunsigned char %c和%hhu%c对应字符身份,%hhd和%hhu对应数字身份short %hdunsigned short %hulong
2015-02-12 17:25:46
13952
原创 计算Linux系统和进程和线程的CPU及内存使用率(c++源码)
proc文件系统下的/proc/stat,/proc/meminfo,/proc//status,/proc//stat总的cpu时间totalCpuTime = user + nice+ system + idle + iowait + irq + softirq + stealstolen + guest进程的总Cpu时间processCpuTime =
2014-11-18 11:23:18
4156
1
原创 linux 的proc文件系统
linux中的/proc文件系统是一个虚拟的文件系统,由内核在运行时动态生成。它提供了内核运行时的配置和状态信息。用户可以通过这些文件来获取、或修改内核的信息。关于proc,可以通过 man proc 获取详细的说明。运行 mount 命令,可以看到 proc 文件系统的挂载信息。mount -t proc proc /proc /proc 目录下的文件/proc/cp
2014-11-11 08:51:27
966
原创 设计模式(四)
迭代器模式 GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。例:#include #include using namespace std;templateclass Iterator{public: virtual void first
2014-11-06 17:48:07
824
原创 设计模式 (三)
抽象工厂模式 GOOD:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。 用于交换产品系列,如ACCESS->SQLSERVER;产品的具体类名被具体工厂的实现分离例:#include#include#includeusing namespacestd; //用户抽象接口class IUser{pub
2014-11-06 17:41:30
648
原创 设计模式(二)
模板方法模式 GOOD:把不变的代码部分都转移到父类中,将可变的代码用virtual留到子类重写#include#include#includeusing namespacestd; classAbstractClass{public: void Show() { cout我是"
2014-10-16 16:53:00
867
原创 设计模式(-)
设计模式分为三种类型创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。Abstract Factory(抽象工厂模式):提
2014-10-15 15:39:58
735
原创 正则表达式
下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:字符说明\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会
2014-10-14 14:36:04
716
原创 C/ C++字符串的各种转换
(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->string char *p = "OK"; string str(p);(3)char * -->CString char *p ="OK"; CString m_Str(p);
2014-09-26 15:15:42
724
原创 UNIX C 语言学习笔记
一、共享库1.创建共享库1)编辑源程序:.c/.h2)编译成目标模块:gcc -c -fpic xxx.c -> xxx.o3)链接成共享库:gcc -shared xxx.o ... -o libxxx.soPIC,Position Independent Code,位置无关码。可执行程序加载共享库时,可将其映射到其地址空间的任何位置。-fPIC - 大模式,
2014-09-23 10:18:36
1148
原创 C++ 模板与STL
一、类型参数x = 10;x = "hello";int x;cin >> x;double y;Student s (...);cin >> s;1.为同一种算法,定义适用于不同类型的版本。2.借助参数宏摆脱类型的限制,同时也丧失了类型安全。3.让预处理器根据一个通用的“模板“宏生成针对不同类型的版本。4.编写带有参数化类型的通用版本,让编译器自动生成
2014-09-03 16:36:53
966
原创 proc/c++
一.什么是pro程序 通过在过程化编程语言中 嵌入sql语句开发出的 应用程序叫pro程序。 宿主语言:sql 语句所嵌入的语言。 sql语句是寄生在这些语言上的。 二.proc/c++ 希望通过c或者c++ 成为访问oracle数据库的工具三.一个proc程序 涉及到内容 定义变量 定义函数 导入头文件
2014-09-03 16:09:22
1120
原创 plsql 过程化(procedure)sql
一.常见的访问oracle的技术 plsql 过程化(procedure)sql 存储过程 proc/proc++ 使用c或者c++ 来访问oracle odbc/ado vc中访问数据库的技术 oci oracle提供的底层接口 sqlj/jdbc java 访问数据库的技术 二.plsql 的特点 结构化
2014-09-03 16:06:20
2723
原创 数据库学习笔记
一.数据库和数据库管理系统oracle 数据库的一种DBMS 数据库管理系统 负责对数据的管理DB 数据库 数据的真正存放RDBMS 关系型数据库管理系统RDB 关系型数据库 基于二维表的数据库表头行列字段名字段值现在主流关系型数据库管理系统oracle oracle(甲骨文) db2 IBM
2014-09-03 15:56:23
860
原创 liunx 常用命令
系统信息arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示C
2014-09-03 15:47:59
531
原创 c++学习之路----笔记
一.c++简介 1.1 历史 80年代 本贾尼. 83 年正式命名 87 gnu c++ 92 微软 c++ IBM 98 ANSI c++ ISO c++98 03 ISO c++03 11 ISO c++0x 1.2 c++ 和 c 的关系
2014-09-03 15:36:26
772
转载 Autoconf和Automake生成Makefile
一、 相关概念的介绍什么是Makefile?怎么书写Makefile?竟然有工具可以自动生成Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚。 1. Makefile makefile用来定义整个工程的编译规则。一个工程中的源文件计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要
2014-09-03 15:24:47
584
c++ stl 手册
2014-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人