C/C++
文章平均质量分 65
nitweihong
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++设计模式之Prototype
C++设计模式之Prototype 2002-08-01· · ··COM集中营 一、功能 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、结构图 三、优缺点 优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的原创 2012-04-26 17:33:26 · 217 阅读 · 0 评论 -
C中_FILE_和_LINE_宏的使用
__FILE__ 包含当前程序文件名的字符串__LINE__ 表示当前行号的整数__DATE__ 包含当前日期的字符串__STDC__ 如果编译器遵循ANSI C标准,它就是个非零值__TIME__ 包含当前时间的字符串例如:输出当前程序文件名的程序://------------------------------------------------------------原创 2012-03-02 15:03:53 · 167 阅读 · 0 评论 -
linux中select()函数分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式原创 2012-04-12 08:58:56 · 218 阅读 · 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 · 357 阅读 · 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 · 165 阅读 · 0 评论 -
五大内存分区
五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在原创 2012-04-12 15:07:50 · 161 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即类名>::静态成员名>。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来原创 2012-04-25 10:24:03 · 286 阅读 · 0 评论 -
C++类静态数据成员与类静态成员函数
如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为原创 2012-04-25 09:15:59 · 203 阅读 · 0 评论 -
虚析构函数
虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。 如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。 所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人原创 2012-04-25 09:29:06 · 356 阅读 · 0 评论 -
文本文件和二进制文件的区别
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: ASC码: 00110101 00110110 00110111 00111000 ↓ ↓ ↓ ↓ 十进制码: 5 6原创 2012-04-25 17:30:20 · 204 阅读 · 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 · 191 阅读 · 0 评论 -
C++设计模式之Adapter
C++设计模式之Adapter一、功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 二、结构图 (1)class adapter (2)object adapter 三、实现 和其他很多模式一样,学习设计模式的重点原创 2012-04-26 17:31:00 · 195 阅读 · 0 评论 -
C++设计模式之Abstract Factory
C++设计模式之Abstract Factory 2002-07-23· · ··COM集中营一、功能 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 二、结构图 类厂最基本的结构示意图如下: 在实际应用中,类厂模式可以扩充到很复杂的情况,如下图所示: 三、优缺原创 2012-04-26 17:31:30 · 197 阅读 · 0 评论 -
C++设计模式之Singleton
C++设计模式之Singleton 2002-07-26· · ··COM集中营 一、功能 保证一个类仅有一个实例。 二、结构图 三、优缺点 Singleton模式是做为"全局变量"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变原创 2012-04-26 17:32:19 · 157 阅读 · 0 评论 -
C++模式开发之Bridge
C++模式开发之Bridge 2002-07-29· · ··COM集中营 一、功能 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 二、结构图 三、示例代码namespace DesignPattern_Bridge{// class Implementor原创 2012-04-26 17:32:42 · 239 阅读 · 0 评论 -
C++模式设计之Builder
C++模式设计之Builder 2002-07-30· · ··COM集中营 一、功能 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、结构图 各类之间的交互关系如下图所示: 三、示例代码 namesp原创 2012-04-26 17:33:04 · 197 阅读 · 0 评论 -
C warnning 处理
* warning: "/*" within comment 举例: /************************************************/ /* /* save snmp entry data /* add by Tina Lee 2003/7/11原创 2012-02-25 09:36:26 · 633 阅读 · 0 评论 -
C++设计模式之Factory Method
C++设计模式之Factory Method 2002-08-05· · ··COM集中营 一、功能 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 二、结构图 三、实现(1)在某些情况下,比如仅仅为了创建适当的Product对象而原创 2012-04-26 17:33:48 · 247 阅读 · 0 评论 -
C++设计模式之Composite
C++设计模式之Composite 2002-08-06· · ··COM集中营 一、功能 表示“部分-整体”关系,并使用户以一致的方式使用单个对象和组合对象。 二、结构图 上图中,也可以做些扩展,根据需要可以将Leaf和Composite做为抽象基类,从中派生出子类来。 三、优缺点 优原创 2012-04-26 17:34:11 · 239 阅读 · 0 评论 -
C++中虚函数深入剖析
虚函数=虚拟函数 虚拟函数地址表=虚表(vtable)每个类中含有虚函数的对象,编译器都会为它们指定一个虚表(其实是一个函数指针数组),保存在数据区,它由此类所有的对象共用(即静态的),同时编译器也会为它(每个类对象)加上一个成员变量,一个指向自己虚表的指针(常称为"vptr"),并存放在对象的首地址上,由此每个类(含有虚函数)分配的对象都有一个vptr,当我们调用虚函数时,实际上是原创 2012-04-26 17:38:54 · 220 阅读 · 0 评论 -
C++成员函数的重载、覆盖与隐藏
成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖:派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;原创 2012-04-26 17:40:08 · 208 阅读 · 0 评论 -
C++中迭代器
C++中迭代器C++中的容器 标准序列容器:vector、string、deque、list 标准关联容器:set、multiset、map、multimap 迭代器的分类 根据迭代器所支持的操作,可以把迭代器分为5类。 1、输入迭代器:是只读迭代器,在每个被遍历的位置上只能读取一次。 2、输出迭代器:是只写迭代器,在每原创 2012-04-16 16:47:38 · 306 阅读 · 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 · 333 阅读 · 0 评论 -
C++命名空间
一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一原创 2012-04-23 09:07:51 · 193 阅读 · 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 · 164 阅读 · 0 评论 -
C++进阶之函数模板
我们知道C++中有函数重载这个概念,函数重载的功能就是把一个函数重写多次使其可以具有多种类型的参数。简单的来说就是用同一种函数名定义多个函数,这些函数的参数个数和参数类型不同。利用函数模版就可以更简单的来实现不同函数的参数需求。其实函数模版和函数重载是非常相似的 唯一的区别就是 函数重载需要写多个函数,而函数模版只需要写一个函数模版(特殊的函数)就可以在调用的时候匹配随意类型的参数了!举个原创 2012-04-23 11:55:29 · 180 阅读 · 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 · 187 阅读 · 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 · 263 阅读 · 0 评论 -
声明函数指针并实现回调
程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。声明函数指针 回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法原创 2012-05-17 10:37:04 · 242 阅读 · 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 · 339 阅读 · 0 评论 -
函数返回局部变量
1. 返回局部变量的值可以有两种情况:返回局部自动变量和局部静态变量,比如,?12345int func(){ int temp = 0; // 返回局部自动变量的值 return temp;}局部变量t原创 2012-11-02 09:54:50 · 294 阅读 · 0 评论 -
sockaddr与sockaddr_in结构体简介
struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF原创 2012-01-30 15:55:08 · 196 阅读 · 0 评论 -
指针 总结
本章主要讲解了一种特殊的变量类型──指针。指针也是一种数据类型,指针变量用来存放地址而不是普通数据。注意区分地址与指针的区别,虽然指针也是地址,但是指针是一种数据类型。使用指针可以使写出来的程序运行效率有极大的提高,并增加了程序设计的灵活性。指针可以与变量、数组、字符串、函数结合起来使用。指针变量是存放的变量,变量指针是指变量的地址。定义指针变量时,指针变量前面的*只是说明转载 2011-11-18 17:42:53 · 125 阅读 · 0 评论 -
关于const char*, char const* and char *const 等的区别
1 关于const char*, char const* and char *const 等的区别 2 3 助记方法: 4 把一个声明从右向左读 5 比如: 6 char * const cp; 7 //cp is a const pointer to char 8 9 const char * cp; 10 //cp is a poin转载 2011-11-18 16:38:14 · 109 阅读 · 0 评论 -
volatile用法总结
首先:volatile是变量修饰符,而synchronized则作用于一段代码或方法;1:例如int geti1() {return i1;}由于每个线程可以有它自己的变量拷贝,而这个变量拷贝值可以和“主”内存区域里存放的不同。导致存在一种可能:“主”内存区域里的i1值是1,线程1里的 i1值是2,线程 2里的i1值是3——这在线程1和线程2都改变了它们各自的i1值,而且这个改变还没来转载 2011-11-18 16:37:18 · 105 阅读 · 0 评论 -
关于C++中函数返回引用的讨论
从函数返回引用确保其引用的对象在函数执行完后仍然存在。引用类型返回值的主要特征是可以作为左值,这意味着我们可以在赋值语句的左边使用返回引用的函数的结果。 永远不要从函数中返回局部变量的引用 C++中,返回引用是一个比较晦涩的概念。在书中,对此仅仅做了一个一般的介绍,并没有展开。我觉得有必要对此进行一定的展开。(1)首先,返回引用,要求在函数的参数中,包含有以引用转载 2011-11-18 16:33:23 · 170 阅读 · 0 评论 -
C++程序的阅读
C++中的类型转换操作符的重载 C++中类对象定义了类型转换操作符后,表达式的含义就要仔细分析。任何一步都有可能导致类型转换函数的调用。这是C和C++很大的不同。 C++中全局变量 对于C++中全局对象变量,其构造函数的调用先于main,实在可执行文件被装载时就调用的,处于ELF中的.init section. C语言中,全局变量没转载 2011-11-18 16:28:44 · 124 阅读 · 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 · 205 阅读 · 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 · 160 阅读 · 0 评论 -
指针,C的灵魂
第一章。指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。先声明几个指针放着做例子:例一:(1)int *ptr;(2)char *ptr;(3)int **ptr;(转载 2011-11-18 17:47:35 · 165 阅读 · 0 评论
分享