
C/C++
zjc0888
这个作者很懒,什么都没留下…
展开
-
virtual继承, 虚基类
父类: class CParent { .... }; 继承类的声明比较特别: class CChild : virtual public CParent { .... } 请问,这个"virtual"是什么作用及含义? --------------------------------------------------------------- 表示虚拟继承,和普通继承是C++的两种多重继承方式。 例如C原创 2011-05-09 10:54:00 · 620 阅读 · 0 评论 -
OCP (Open-Close Principle)
Open-Closed Principle 软件设计中的“开-闭原则” 这个原则最早是由Bertrand Meyer提出,英文的原文是:Software entities should be open for extension,but closed for modification.意思是说,一个软件实体应当对扩展开放,对修改关闭.也就是说,我们在设计一个模块的时候,应当使原创 2011-06-13 09:45:00 · 710 阅读 · 0 评论 -
适配器模式
适配器模式 Adapter(别名Wrapper)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。 要点: 1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。 2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现原创 2011-06-13 10:07:00 · 653 阅读 · 0 评论 -
简单工厂、工厂方法、抽象工厂模式
前言工大有许多同学是做java的,大家都知道java最大的优点是它的完全OO化和它在多年的发展过程中吸收和总结了许多先进的框架与模式,其中工厂模式就是最常用的模式之一。下面我想将我在学习和实践过程中对工厂模式的认识与了解介绍给大家。由于笔者能力限制,在实践中也没参与过什么大的项目,笔者参与过的项目用到的工厂模式主要是简单工厂模式(Simple Factory)和工厂方法模式(Factory Method),所以笔者在本文主要介绍的是这两种模式。准备知识在OO设计领域,我们知道前人总结了不原创 2011-04-25 17:23:00 · 1378 阅读 · 0 评论 -
strcpy、strncpy、strlcpy,当多出一位怎样多保留一个字节
数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,如: void Func ( char str[100]) {…… } 则sizeof(str) = 4 str数组作为虚参声明时,sizeof(str)=4(指针大小) strncat 原型:extern char *strncat(char *dest,c原创 2011-06-16 14:03:00 · 1239 阅读 · 0 评论 -
怎样向一个c++函数传数组、Linux下怎么显示unicode字符、Linux的地址空间
我们都知道,下面两个函数的参数实际上都是整型指针:void test1(int * p){} void test2(int p[10]){ //下面这句话如果直接看汇编代码的话实际上是直接对num赋值1 int num = sizeof(p)/sizeof(p[0]);} 编译器并不会把p[10]当做数组来处理,但是如果真的需要以一个数组为参数该怎么原创 2011-06-16 14:37:00 · 1090 阅读 · 0 评论 -
sqlite3 --sql命令简单介绍(zt)
目录1建立数据库档案2在sqlite3提示列下操作3SQL的指令格式4建立资料表5建立索引6加入一笔资料7查询资料8如何更改或删除资料9其他sqlite的特别用法10小结 建立数据库档案用sqlite3建立数据库的方法很简单,只要在sh原创 2011-06-20 17:39:00 · 558 阅读 · 0 评论 -
C++函数参数传递和返回值
<br />1、函数的参数传递<br />1.1函数调用的机制<br /> 函数的调用过程实际是对栈空间的操作过程(先进后出)。因为调用函数是用栈空间来保存信息的。函数调用过程大致描述如下:<br />1)建立被调用函数的栈空间;<br />2)保存调用函数的运行状态和返回地址;<br />3)传递函数参给形参;<br />4)执行被调用函数的函数体内语句;<br />5)将控制权或返回值交给调用函数。<br />存放函数的栈区是相互独立的。函数之间只能通过参数传递、返回值或原创 2011-05-06 12:38:00 · 4274 阅读 · 0 评论 -
MemoryHeapBase内存分配、Ashmem_create_Region mmap申请共享内存
<br /> 几个与内存相关的类的头文件如下所示:<br />IMemory.h:定义内存相关类的接口,表示堆内存的类IMemoryHeap和BnMemoryHeap,表示一般内存的类IMemory和BnMemory。<br />MemoryHeapBase.h:定义类MemoryHeapBase,继承并实现BnMemoryHeap<br />MemoryBase.h:定义类MemoryBase,继承并实现BnMemory<br /> 在一般的使用过程中,通常是以使用MemoryHeapBase类分配原创 2011-05-06 18:23:00 · 6058 阅读 · 0 评论 -
堆空间、栈空间和堆栈平衡
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态原创 2011-06-13 11:33:00 · 1987 阅读 · 0 评论 -
外观模式
God bless you 外观模式 外观模式 外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 要点: 1. 外观模式为复杂子系统提供了一个简单接口,并不为子系统添加新的功能和行为。 2. 外观模式实现了子系统与客户之间的松耦合关系。 3. 外观模式没有封装子系统的原创 2011-06-13 10:11:00 · 725 阅读 · 0 评论 -
malloc 和 calloc
<br />calloc是一个C语言函数<br /> 函数名: calloc <br />功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。 <br /> 跟 malloc的区别: calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。 <br /> 用 法: void *calloc(unsigned n,uns原创 2011-05-10 10:30:00 · 808 阅读 · 0 评论 -
C/C++内存区分配
<br /> 一.在c中分为这几个存储区<br />1.栈 - 有编译器自动分配释放<br />2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收<br />3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放<br />4.另外还有一个专门放常量的地方。 - 程序结束释放<br />原创 2011-05-09 10:48:00 · 546 阅读 · 0 评论 -
字节对齐的问题
<br />. 基本概念<br />字节对齐:计算机存储系统中以Byte为单位存储数据,不同数据类型所占的空间不同,如:整型(int)数据占4个字节,字符型(char)数据占一个字节,短整型(short)数据占两个字节,等等。计算机为了快速的读写数据,默认情况下将数据存放在某个地址的起始位置,如:整型数据(int)默认存储在地址能被4整除的起始位置,字符型数据(char)可以存放在任何地址位置(被1整除),短整型(short)数据存储在地址能被2整除的起始位置。这就是默认字节对齐原创 2011-04-06 16:25:00 · 714 阅读 · 1 评论 -
BS 与CS的区别
<br />bs是浏览器(browser)和服务器(server) <br />cs是静态客户端程序(client)和服务器(server) <br />区别在于,虽然同样是通过一个程序连接到服务器进行网络通讯,但是bs结构的,客户端运行在浏览器里,比如你看百度,就是通过浏览器.还有一些bs结构的应用,比如中国电信,以及一些电子商务平台.用bs结构的好处是,不必专门开发一个客户端界面,可用asp,php,jsp等比较快速开发web应用的程序开发. <br />cs结构的,要做一个客户端.网络游戏原创 2011-04-06 16:17:00 · 996 阅读 · 0 评论 -
c++关键字mutable
<br />先说用法,mutable关键字只能修饰非静态以及非常量成员变量,使用mutable修饰的成员变量在const函数中的值是可以修改的。<br />比如说下面的代码:<br />classDemo<br />{<br />public:<br /> Demo() {}<br /> ~Demo() {}<br />public:<br /> boolgetFlag()const<br /> {<br /> m_nA原创 2011-04-06 16:48:00 · 590 阅读 · 0 评论 -
一次读入整个二进制文件
1.打开文件 if((fp = fopen(FILE_NAME, "rb+")) == NULL)2.得到文件的长度 fseek(ap->fp, 0L, SEEK_END); file_size = ftell(fp); if(-1L == file_size) { printf("ftell() err原创 2011-06-10 18:15:00 · 730 阅读 · 0 评论 -
有符号数和无符号数
有符号数就是用最高位表示符号(正或负),其余位表示数值大小,无符号数则所有位都用于表示数的大小有符号数就是用最高位表示符号(正或负),其余位表示数值大小如:0011 表示 +3; 1011 表示 -3无符号数则所有位都用于表示数的大小如:0011 表示 3 1011 表示 11 假如,int一样吧,signed int【有符号整型】=-214原创 2011-06-10 18:24:00 · 1060 阅读 · 0 评论 -
命令模式(Command)---“一个指挥官请求(命令)三连偷袭敌人”
1.1 如何开机 估计有些朋友看到这个标题会非常奇怪,电脑装配好了,如何开机?不就是按下启动按钮就可以了吗?难道还有什么玄机不成。 对于使用电脑的客户——就是我们来说,开机确实很简单,按下启动按钮,然后耐心等待就可以了。但是当我们按下启动按钮过后呢?谁来处理?如何处理?都经历了怎样的过程,才让电脑真正的启动起来,供我们使用。 先一起来简单的认原创 2011-06-09 17:36:00 · 1635 阅读 · 0 评论 -
VC++多线程编程-线程间的通信和线程同步
线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明。使用全局变量进行通信由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标转载 2012-03-20 10:46:59 · 7780 阅读 · 0 评论