C/C++
文章平均质量分 65
nitweihong
这个作者很懒,什么都没留下…
展开
-
函数返回局部变量
1. 返回局部变量的值可以有两种情况:返回局部自动变量和局部静态变量,比如,?12345int func(){ int temp = 0; // 返回局部自动变量的值 return temp;}局部变量t原创 2012-11-02 09:54:50 · 213 阅读 · 0 评论 -
C++模式开发之Bridge
C++模式开发之Bridge 2002-07-29· · ··COM集中营 一、功能 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 二、结构图 三、示例代码namespace DesignPattern_Bridge{// class Implementor原创 2012-04-26 17:32:42 · 129 阅读 · 0 评论 -
C++设计模式之Singleton
C++设计模式之Singleton 2002-07-26· · ··COM集中营 一、功能 保证一个类仅有一个实例。 二、结构图 三、优缺点 Singleton模式是做为"全局变量"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变原创 2012-04-26 17:32:19 · 117 阅读 · 0 评论 -
C++设计模式之Abstract Factory
C++设计模式之Abstract Factory 2002-07-23· · ··COM集中营一、功能 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 二、结构图 类厂最基本的结构示意图如下: 在实际应用中,类厂模式可以扩充到很复杂的情况,如下图所示: 三、优缺原创 2012-04-26 17:31:30 · 152 阅读 · 0 评论 -
C++设计模式之Adapter
C++设计模式之Adapter一、功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 二、结构图 (1)class adapter (2)object adapter 三、实现 和其他很多模式一样,学习设计模式的重点原创 2012-04-26 17:31:00 · 128 阅读 · 0 评论 -
拷贝构造函数
对于普通类型的对象来说,他们之间的复制是很简单的,例如:int a=100;int b=a;而类对象和普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CA{public: CA(int b) { a=b; } void Show原创 2012-04-26 17:26:35 · 145 阅读 · 0 评论 -
文本文件和二进制文件的区别
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码: 00110101 00110110 00110111 00111000 ↓ ↓ ↓ ↓ 十进制码: 5 6原创 2012-04-25 17:30:20 · 150 阅读 · 0 评论 -
虚析构函数
虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。 如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。 所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人原创 2012-04-25 09:29:06 · 298 阅读 · 0 评论 -
C++类静态数据成员与类静态成员函数
如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为原创 2012-04-25 09:15:59 · 150 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即类名>::静态成员名>。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来原创 2012-04-25 10:24:03 · 187 阅读 · 0 评论 -
五大内存分区
五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在原创 2012-04-12 15:07:50 · 113 阅读 · 0 评论 -
C++中的虚函数(virtual function)多态
1.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public: virtual void foo() { cout };class B: public A{public: virtual void foo() { cout原创 2012-04-23 11:39:29 · 103 阅读 · 0 评论 -
push_back pop_back
deque::push_back 原型 void push_back(const T& x); typedef deque INTDEQUE; INTDEQUE dequetest; dequetest.push_back(value) 就是在当前的队列尾部插入一个数value 例如: dequetest.push_back(1); dequetest.push_back(2);原创 2012-04-12 15:05:53 · 295 阅读 · 0 评论 -
linux中select()函数分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式原创 2012-04-12 08:58:56 · 160 阅读 · 0 评论 -
C++模式设计之Builder
C++模式设计之Builder 2002-07-30· · ··COM集中营 一、功能 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、结构图 各类之间的交互关系如下图所示: 三、示例代码 namesp原创 2012-04-26 17:33:04 · 145 阅读 · 0 评论 -
C++设计模式之Prototype
C++设计模式之Prototype 2002-08-01· · ··COM集中营 一、功能 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、结构图 三、优缺点 优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的原创 2012-04-26 17:33:26 · 170 阅读 · 0 评论 -
C++ Const使用总结
const:类型限定符,可以指定所修饰对象,不改变内容和在内存的存储地址.1>修饰基本类型变量如:const int x=10;//值和地址都不能变再赋值.x=77;//错误2>const指针指针可用const修饰,可放在类型前,类型后,或是两边都放. a>常量指针.对int* 用类型限定符const: 如:int number=原创 2012-05-22 15:01:23 · 242 阅读 · 0 评论 -
声明函数指针并实现回调
程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。声明函数指针 回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法原创 2012-05-17 10:37:04 · 185 阅读 · 0 评论 -
C Compiler Warning Abstract
1) warning: ISO C90 forbids mixed declarations and codeC语言是面向过程的语言,这个警告通常表示声明应该在其他代码的前面。 2) warning: initialization from incompatible pointer type在Linux kernel中有许多callback函数,这个警告表明call原创 2012-05-16 10:15:50 · 200 阅读 · 0 评论 -
c++中继承问题小结
1.c++中继承有公有继承,保护继承,私有继承 定义个基类: #include using namespace std; class Base { public: void display() { cout《"huang"《endl; } protected: int x;原创 2012-04-23 11:58:43 · 135 阅读 · 0 评论 -
C++进阶之函数模板
我们知道C++中有函数重载这个概念,函数重载的功能就是把一个函数重写多次使其可以具有多种类型的参数。简单的来说就是用同一种函数名定义多个函数,这些函数的参数个数和参数类型不同。利用函数模版就可以更简单的来实现不同函数的参数需求。其实函数模版和函数重载是非常相似的 唯一的区别就是 函数重载需要写多个函数,而函数模版只需要写一个函数模版(特殊的函数)就可以在调用的时候匹配随意类型的参数了!举个原创 2012-04-23 11:55:29 · 128 阅读 · 0 评论 -
关于volatile
volatile的本意是“易变的”由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:static int i=0;int main(void){...while (1){if (i) dosomething();}}/* Interrupt service routine. */void ISR_2(void)原创 2012-04-23 11:45:13 · 119 阅读 · 0 评论 -
C++命名空间
一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一原创 2012-04-23 09:07:51 · 142 阅读 · 0 评论 -
GCC编译选项
gcc 提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration原创 2012-04-19 08:34:37 · 252 阅读 · 0 评论 -
C++中迭代器
C++中迭代器C++中的容器 标准序列容器:vector、string、deque、list 标准关联容器:set、multiset、map、multimap 迭代器的分类 根据迭代器所支持的操作,可以把迭代器分为5类。 1、输入迭代器:是只读迭代器,在每个被遍历的位置上只能读取一次。 2、输出迭代器:是只写迭代器,在每原创 2012-04-16 16:47:38 · 225 阅读 · 0 评论 -
C++成员函数的重载、覆盖与隐藏
成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖:派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;原创 2012-04-26 17:40:08 · 152 阅读 · 0 评论 -
C++中虚函数深入剖析
虚函数=虚拟函数 虚拟函数地址表=虚表(vtable)每个类中含有虚函数的对象,编译器都会为它们指定一个虚表(其实是一个函数指针数组),保存在数据区,它由此类所有的对象共用(即静态的),同时编译器也会为它(每个类对象)加上一个成员变量,一个指向自己虚表的指针(常称为"vptr"),并存放在对象的首地址上,由此每个类(含有虚函数)分配的对象都有一个vptr,当我们调用虚函数时,实际上是原创 2012-04-26 17:38:54 · 158 阅读 · 0 评论 -
C++设计模式之Composite
C++设计模式之Composite 2002-08-06· · ··COM集中营 一、功能 表示“部分-整体”关系,并使用户以一致的方式使用单个对象和组合对象。 二、结构图 上图中,也可以做些扩展,根据需要可以将Leaf和Composite做为抽象基类,从中派生出子类来。 三、优缺点 优原创 2012-04-26 17:34:11 · 185 阅读 · 0 评论 -
C++设计模式之Factory Method
C++设计模式之Factory Method 2002-08-05· · ··COM集中营 一、功能 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 二、结构图 三、实现(1)在某些情况下,比如仅仅为了创建适当的Product对象而原创 2012-04-26 17:33:48 · 196 阅读 · 0 评论 -
C中_FILE_和_LINE_宏的使用
__FILE__ 包含当前程序文件名的字符串__LINE__ 表示当前行号的整数__DATE__ 包含当前日期的字符串__STDC__ 如果编译器遵循ANSI C标准,它就是个非零值__TIME__ 包含当前时间的字符串例如:输出当前程序文件名的程序://------------------------------------------------------------原创 2012-03-02 15:03:53 · 124 阅读 · 0 评论 -
C warnning 处理
* warning: "/*" within comment 举例: /************************************************/ /* /* save snmp entry data /* add by Tina Lee 2003/7/11原创 2012-02-25 09:36:26 · 510 阅读 · 0 评论 -
linux C func dlopen and dlsym
dysym() The function dlsym() takes a "handle" of a dynamic library returned by dlopen() and the null-terminated symbol name, return‐ ing the address where that symbol is loaded into mem原创 2012-02-23 16:09:26 · 363 阅读 · 0 评论 -
内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放原创 2012-01-30 14:27:46 · 172 阅读 · 0 评论 -
CR, LF, CR/LF 回车 换行
“回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将原创 2012-01-30 14:27:13 · 186 阅读 · 0 评论 -
七种qsort排序方法
七种qsort排序方法 一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二、对char原创 2012-01-30 14:25:28 · 117 阅读 · 0 评论 -
Linux下Select用法
由于时间关系,先将我用的代码写到这里,稍后解释。这里服务器端有两个可能阻塞的描述符:一个是网络的,另一个是来自终端的,用select可以保证无论是客户端还是终端给它发送数据,它都可以处理,当然还有更高效率的实现方式,就是poll和epoll,网上有它们查找过程的不同。这里不赘述。18 #include 19 #include 20 #include in.h>21 #incl转载 2011-11-29 09:44:31 · 158 阅读 · 0 评论 -
关于C的函数指针总结
函数指针是指向函数的指针变量 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的转载 2011-11-29 09:41:50 · 123 阅读 · 0 评论 -
指针,C的灵魂
第一章。指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。先声明几个指针放着做例子:例一:(1)int *ptr;(2)char *ptr;(3)int **ptr;(转载 2011-11-18 17:47:35 · 106 阅读 · 0 评论 -
指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针
--------------指针----------------int a=10;int *p=&a;-------------指针的指针-----------int b=20;int *p=&b;int **p2p=&p; -------------简单数组-----------------int c[10];//整数数组,含有10个整数元素转载 2011-11-18 17:42:00 · 115 阅读 · 0 评论 -
Linux下静态库生成和使用
Linux下静态库生成和使用一.静态库概念1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序。静态库以后缀为”.a”的特殊的存档(archive file)存储。2.标准系统库可在目录/usr/lib与/lib中找到。比如,在类Unix系统中C语言的数序库一般存储为文件/usr/lib/libm.a。该库中函数的原型声明在头文件/转载 2011-11-22 11:39:02 · 147 阅读 · 0 评论