C/C++
灌水九段
Talk is cheap, show me the code
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CString转char
1.传给未分配内存的const char* (LPCTSTR)指针. CString cstr(asdd); const char* ch = (LPCTSTR)cstr; ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.2.传给未分配内存的指针. CString cstr = "ASDDSD"; char转载 2009-01-02 16:19:00 · 1322 阅读 · 0 评论 -
C++字符串函数详解[转]
转载自:http://zhanglong2004.spaces.live.com/?owner=1 void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmove(void *dest, const void *src, size_t count)转载 2009-12-10 15:32:00 · 705 阅读 · 0 评论 -
volatile关键字
<br />volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例如:volatile int i=10;int j = i;...int k = i;volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行转载 2010-07-08 13:45:00 · 501 阅读 · 0 评论 -
存储类关键字(storage class specifier)
储类关键字(storage class specifier)包括:auto,extern,static,register ,mutable,volatile,restrict以及typedef。对于typedef,只是说在语句构成上,typedef 声明看起来象 static,extern 等类型的变量声明;而且对于编译器来说,多个存储类关键字不能同时用,所以typedef转载 2010-05-19 15:53:00 · 2630 阅读 · 0 评论 -
从C++向COM演进
我们要解决的问题是复用问题,我们的目标:(1) 当被复用的软件升级时,客户程序不需要重新编译。(2) 被复用的软件应该容易扩展和升级。(3) 在客户能正常使用复用组件功能的基础上,组件向客户暴露尽可能少的信息。(4) 尽可能是客户使用组件更加方便,将许多繁琐复杂的工作从客户端转移到组件内部。==》所有可以在组件内部完成的事情,决不在组件外部完成。COM 的核心在于:接口。它解决了复用时两个主要的问题:(1)转载 2010-07-21 14:26:00 · 652 阅读 · 0 评论 -
进程与系统服务之间用event通讯
<br />一般来说,进程与进程间通讯的通会采用以下代码<br />进程A<br />HANDLE hevent;<br />hevent=CreateEvent(NULL, TRUE, FALSE, "myevent");<br /> DWORD dwRtn = WaitForSingleObject(g_hEvent, 60*1000); //等1分钟<br /> if (dwRtn == WAIT_OBJECT_0) <br />{<br /> DePrintf("get even转载 2010-06-23 15:36:00 · 2123 阅读 · 2 评论 -
用InternetOpen下载小文件 vc c++
<br />文章改自:<br />http://hi.baidu.com/hacknothack/blog/item/4ca77710bc8e97fdc3ce79ad.html<br />使用vc6.0通过<br />#include "stdafx.h"#include<windows.h>#include<wininet.h>#include<iostream.h>#pragma comment(lib,"wininet.lib")void main(){ DWORD转载 2010-10-15 11:13:00 · 5321 阅读 · 1 评论 -
stl迭代器的种类
http://blog.youkuaiyun.com/touzani/archive/2007/06/08/1643859.aspx转载 2010-12-20 16:47:00 · 971 阅读 · 0 评论 -
虚析构函数
<br />在删除指向子类的基类指针时(base *p=new derived; delete p;),如果基类析构函数不为虚函数,则不会调用子类的析构。<br />引入虚析构函数的目的应该是正确释放指向子类的基类指针。原创 2010-12-20 15:42:00 · 694 阅读 · 0 评论 -
虚继承
<br />多重继承中,为防止重复继承同一个函数原创 2010-12-21 14:33:00 · 595 阅读 · 0 评论 -
静态成员函数
<br />静态成员函数不属于类的方法,已经消掉了this指针,所以无法访问类的成员函数。转载 2010-12-29 17:55:00 · 643 阅读 · 0 评论 -
同步异步 阻塞非阻塞
<br />同步:函数没有执行完不返回,线程被挂起 <br />阻塞:没有收完数据函数不返回,线程也被挂起<br />异步:函数立即返回,通过事件或是信号通知调用者<br />非阻塞:函数立即返回,通过select通知调用者转载 2010-12-29 16:54:00 · 633 阅读 · 0 评论 -
设计模式之工厂模式
<br /> 1、为了提高内聚降低耦合,我们经常会抽象出一些类的公共接口形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类来实现,达到了多态的目的。这里很容易出现的一个问题 n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new XXX的代码。这里带来两个问题 1) 客户端程序员必须知道实际子类的名称 2)、程序的扩展性和维护变得越来越困难。<br /> 2、还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类。这里的意思为:假设我们转载 2010-12-30 17:54:00 · 697 阅读 · 0 评论 -
简单工厂,工厂模式,抽象工厂
简单工厂不算一个正式的设计模式。工厂模式分为抽象工厂模式和工厂方法模式,至于二者的区别不是三言两语说得清楚的,建议百度一下。这里给出定义:抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。转载 2011-01-04 15:26:00 · 713 阅读 · 0 评论 -
c++引用
引用就是常数指针。int& a = c;其实等价于int const* b=&c。不过编译器在处理a.foo()时自动转换成类似b->foo()的形式。所以,即使你完全抛弃int&而用int const*代替也没问题。那么引用在内存中就是一个指针的空间。转载 2011-01-04 15:01:00 · 631 阅读 · 0 评论 -
高内聚 低耦合
<br />藕合性指程序模块间存在联系的紧密程度 <br />内聚性指程序模块内部的相互依赖程度<br /><br />低耦合就是模块之间的关联少,越独立耦合度越低<br />高内聚就是模块的内容针对干的事情少,功能越单一内聚越高 <br /><br />一般情况,我们在编写程序的时候,要求高内聚,低藕合.<br /><br />用程序举例的话就是这样的.简单一点,用两个函数来说明一下:<br />藕合性:<br /><br /><br />boolean var2= f转载 2011-01-05 10:26:00 · 1797 阅读 · 0 评论 -
ANSI UNIcode UNIcode big endian UTF-8
随便说说字符集和编码 快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思。" 并不是所有简单的问题都很容易回答,就像这个问题一样。于是我答应专门写一篇BLOG来从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许这样开始转载 2009-11-23 10:27:00 · 602 阅读 · 0 评论 -
虚函数表
# 细谈C++多态性的“动”与“静” # http://www.csai.cn 作者:方舟 来源:天极网 2006年8月9日 发表评论 进入社区 # 在我们讨论多态的时候,先看看什么是硬编码和软编码:硬编码就是把代码写死了,导致弹性不足,降低了可扩展性,例如在代码里的: if...else...;switch...case... # # 这些代码通常都属于硬转载 2009-11-12 10:54:00 · 678 阅读 · 0 评论 -
strspn函数
int len1, len2;char buffer[] = "25,142,330,Smith,J,239-4123";len1 = strspn( buffer, "0123456789");len2 = strspn( buffer, ",0123456789");len1和len2的值分别是2和11 The strspn() function returns the number原创 2009-07-24 10:53:00 · 2208 阅读 · 1 评论 -
关于main参数的问题
例如:你的程序名为 test.exe 这样的话如果你键入 test a bargv[0]= "test; 则argv[1] = "a"; argv[2] = "b";转载 2009-01-31 06:02:00 · 593 阅读 · 0 评论 -
引用和指针的区别
1、定义引用时必须初始化,而指针不必 int a=1; int b=2; int *p; int &ra = a; 2、引用的对象不能更改,指针可以 ra = b; 这里仅仅是把b的值赋给a,而不是把ra设为b的引用。 3、引用不能为空,指针可以为NULL再谈谈引用和指针作为函数参数时的情况:两种参数都允许函数修改实参指向的对象,如果一个参数原创 2008-12-02 23:16:00 · 607 阅读 · 0 评论 -
const关键字
const可以声明常量,类似于#define比如const int a = 9, a作为常量就不能更改了,或者这样写也可以 int const a = 9比较搞的是这几种char * const cp //常指针 cp不能更改 只能指向某一块固定的内存(cp++会报错)const char* p //指针指向的是字符串常量 (p[0] = XXX 会出错) char co原创 2008-12-02 16:37:00 · 569 阅读 · 0 评论 -
运算符重载函数入门
语法为 返回类型 类名::operator 要重载的运算符(参数列表)分全局函数和成员函数,全局函数没有类名这一项参数个数由以下2个因素决定:1、该操作符是一元操作符还是二元操作符2、它是被定义为全局函数还是成员函数。如果是全局函数,对于一元操作符,它的参数个数是1个,二元操作符个数为2个;成员函数各比全局函数少一个。这是由于该类本身也作为一个操作数参与计算。原创 2008-12-04 15:38:00 · 755 阅读 · 0 评论 -
关于static关键字
修饰全局变量//a.cppstatic int n; //定义静态全局变量//b.cppstatic int n //定义静态全局变量静态全局变量不能被其它文件所用,别的文件中不能通过extern来使用全局非static变量可以在别的文件中以extern方式声明并使用修饰局部变量void fn(){ static int i=0; i++; }这里每次调用fn,i都是上一次调用完后的原创 2008-12-04 00:50:00 · 700 阅读 · 0 评论 -
c/c++中#include 与#include " "区别
#include " "首先在当前目录下寻找,如果找不到,再到系统目录中寻找 #include 直接去系统目录中找这里的系统目录就是指Tools->Options->Derctories中设置的地址原创 2008-12-11 03:37:00 · 625 阅读 · 0 评论 -
什么时候会用到拷贝构造函数?
拷贝构造函数顾名思义就是有两个特点:1是构造函数,2该函数有一个同类型的参数,函数的功能就是将该参数的内容拷贝到本身。通常在一个类(结构)中有指针成员的时候需要定义拷贝构造函数,可以不需要定义。 1-什么时候会用到拷贝构造函数? 2-什么时候有必要手动写拷贝构造函数?1-什么时候会用到拷贝构造函数? 当任何你想复印东西的时候,而不管东西被复印成什转载 2009-02-24 17:38:00 · 1721 阅读 · 0 评论 -
__stdcall和__cdecl
调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。__stdcall: 采 用__stdcal约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,函数参数个数固定。由于函数体本身知道传进来的参数 个数,因此被调用的函数可以在返回前用一条ret n指令直接清理传递参数的堆栈。__转载 2008-12-16 18:02:00 · 625 阅读 · 0 评论 -
C++:析构函数写成虚函数是干什么用的,为什么要这么写?
写成虚的是为了在实现多态的时候不造成内存泄露, 如果基类析构函数前不加vitual,派生类对象被销毁后,只会调用基类的析构函数,而不会去调用派生类的析构函数。 比如:class a{int aa;public:virtual ~a(){};};class b : public a{int *bb;};如果你这样:a *pa =翻译 2009-03-06 12:44:00 · 1380 阅读 · 4 评论 -
extern "C"
C和C++对函数的处理方式是不同的.extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明因此,为了在C++代码中调用用C写成的库文件,就需要用extern "C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。 比如,现在我们有了一个C库文件,它的头文件是f.h,产生的li转载 2008-12-19 14:58:00 · 493 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全转载 2008-12-23 16:46:00 · 467 阅读 · 0 评论 -
函数后加CONST的意义
使用const修饰符主要是提供给自定义类的const对象调用时使用的,用const修饰和缺省数据类型中的含义类似,表示类中的成员不会被改变。注意在const成员函数中不能改变类中非mutable修饰的成员,也不能调用非const函数。只有成员函数后才能加const转载 2009-03-08 02:40:00 · 889 阅读 · 0 评论 -
strpbrk函数
原型:extern char *strpbrk(char *s1, char *s2);用法:#include 功能:在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内。说明:返回指向s1中第一个相匹配的字符的指针,如果没有匹配字符则返回空指针NULL。 char *s1="Welcome To Beijing";char *s2="B原创 2009-07-24 11:05:00 · 1019 阅读 · 0 评论 -
strchr函数
extern char *strchr(char *s,char c);用法:#include 功能:查找字符串s中首次出现字符c的位置说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。可以用于过滤文本中的注释符转载 2009-07-24 11:01:00 · 886 阅读 · 0 评论 -
STL仿函数
标准模板库(STL)包含C++程序员不可或缺的许多东西。它还有力证明了C++的概念化编程能力。STL的概念包括容器(container)、范围(range)、算法(algorithm)以及仿函数(functor)。本文着重讲解仿函数,它本质上是一个类,但通过重载 operator(),所以行为与函数相似。这个概念在STL之前便已存在,STL只是从另一个角度来看待它。继续阅读本文,你就能体会到个中三味。STL以泛型方式来处理函数。假如一个参数的行为应该与函数相仿,STL算法就不关心它是一个实际的C++转载 2011-01-12 10:02:00 · 2911 阅读 · 0 评论
分享