
C++/C/lisp
文章平均质量分 63
deepfuture
这个作者很懒,什么都没留下…
展开
-
C 标准库函数getchar的陷阱
函数名字与返回值类型在语义上不可冲突。违反这条规则的典型代表是C 标准库函数getchar。例如:char c;c = getchar();if (c == EOF)?按照 getchar 名字的意思,将变量c 声明为char 类型是很自然的事情。但不幸的是getchar 的确不是char 类型,而是int 类型,其原型如下:int getchar(void);由于c 是char 类型,取值范围是...2009-12-21 20:43:00 · 122 阅读 · 0 评论 -
c++ -if语句比较注意
4.3.1 布尔变量与零值比较z 【规则4-3-1】不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE 的值究竟是什么并没有统一的标准。例如Visual C++ 将TRUE 定义为1,而Visual Basic 则将TRUE 定义为-1。假设布尔变量名字为flag,它与零值比较的标准if...2009-12-21 20:44:00 · 251 阅读 · 0 评论 -
C++程序标识符注意
【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue 写成NowValue。z 【规则3-1-2】标识符的长度应当符合“min-length && max-information”原则。几十年前老ANSI C ...2009-12-21 20:45:00 · 218 阅读 · 0 评论 -
C++类编码注意
类的版式类可以将数据和函数封装在一起,其中函数表示了类的行为(或称服务)。类提供关键字public、protected 和private,分别用于声明哪些数据和函数是公有的、受保护的或者是私有的。这样可以达到信息隐藏的目的,即让类仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们不可以滥用类的封装功能,不要把它当成火锅,什么东西都往里扔。类的版式主要有两种方式:(1)将private 类型的...2009-12-21 20:46:00 · 106 阅读 · 0 评论 -
f o r k函数
一个现存进程调用f o r k函数是U N I X内核创建一个新进程的唯一方法(这并不适用于前节提及的交换进程、i n i t进程和页精灵进程。这些进程是由内核作为自举过程的一部分以特殊方式创建的)。 #i nclude <sys/types.h>#i nclude <unistd.h>pid_t fork(void);返回:子进程中为0,父进程中为子进程I D,出错...2009-12-21 20:48:00 · 241 阅读 · 0 评论 -
C++构造函数调用顺序
class Y {...}class X : public Y {...}X one;构造函数的调用顺序是下面的顺序:Y(); // 基类的构造函数X(); // 继承类的构造函数对于多基类的情况,下面是一个例子:class X : public Y, public ZX one;构造函数以声明的次序调用。Y(); // 基类构造函数首先被调用Z();X();虚基类...2009-12-21 20:50:00 · 162 阅读 · 0 评论 -
C++-关联容器类型map
1、#include<map>2、一种键/值对结构。最主要的两个动作向里面插入元素,查询元素是否存在。3、map <string,int>word_count//以string为索引,int为值的结构,可用于表示单词频率统计4、class employee;map <int,employee*>personnel;//以int为索引,雇员类对...2009-12-21 21:17:00 · 91 阅读 · 0 评论 -
C的可变参数传入
1、可变参数,即函数在声明和使用时可以不指定参数个数,参数可变2、宏va_arg()、va_start()、va_end()共同使用完成向函数传入数目可变的变元操作。3、具体使用如调用了一个求和函数:double dbsumdbsum=sum_series(5,10.0,20,1.9,9.1,4,9)//第一个参数5表示参数个数求和函数如下:double sum_ser...2009-12-21 21:37:00 · 104 阅读 · 0 评论 -
C++学习笔记-抽象容器类型
一、1、删除操作(1)erase()slist.erase(iter);slist.erase(first,last);//first和last都是iterator标记(2)pop_back()2、赋值和对换(1)slist1=slist2;//slist1有2个元素,slist2有6个元素,则赋值后slist1有6个元素,slist2有6个元素。(2)slist....2009-12-21 21:42:00 · 136 阅读 · 0 评论 -
c++学习--显示类型转化
1、cast_name <type> (表达式)type:转换后的类型表达式:待转化的值2、包括static_cast、const_cast、dynamic_cast和reinterpret_cast3、const_cast:去掉CONST属性,并转换成name类型如:const_cast <char*> (pc_str);enum mumble...2009-12-21 21:47:00 · 82 阅读 · 0 评论 -
c++学习笔记-bitset操作
1、BITSET类是位向量类,以便进行位向量操作。2、包含相关头文件#include <bitset>3、常见声明方式(1)bitset <32>bitvec;//长度为32位的向量对象(2)bitset <32>bitvec(0xffff);(3) string bitval("1010");bitset <32>b...2009-12-21 21:49:00 · 136 阅读 · 0 评论 -
模板的编译与链接
1、编译器遇到一个TEMPLATE时,不立刻为之产生机器代码,等到TEMPLATE被指定为某种类型2、当多个源文件使用同一TEMPLATE时,事情更趋复杂,BORLAND要求使用TEMPLATE的程序代码的目的文件中都存在有TEMPLATE代码,链接器负责复制和删除。设有一个程序,包含两个源文件A.cpp和B.cpp,它们都载入THREE。H,THREE。H定义了一人TEMPLATE类,A...2009-12-21 21:49:00 · 131 阅读 · 0 评论 -
typedef的用途和陷阱
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,// 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来...2009-12-22 11:25:00 · 89 阅读 · 0 评论 -
ACII码表
ACII码表2009-12-22 11:47:00 · 789 阅读 · 0 评论 -
C++类静态成员
1、静态成员为该类的所有对象共享,它被存储在一个公共内存中2、静态成员函数不包含THIS指针,因些只能访问类的其他静态成员以及引用其他类的静态成员函数。3、静态成员函数不能声明为虚函数。4、静态成员只能在类外的某处进行定义性声明。...2009-12-22 19:16:00 · 127 阅读 · 0 评论 -
构造函数和析构函数的执行顺序
1、构造函数的调用顺序取决于这些对象成员在类中定义的顺序,先调用对象成员的构造函数,再执行类的构造函数,析构函数与之相反。2、产生这种顺序的原因是:对于类对象,使用的是堆栈来分配内在的。1、存放不便的对象成员或成员函数采用堆来储存,堆栈里存放的是指针。2、比较方便的普通成员直接储存。构造函数如有多个对象成员要初始化,用:分隔ccontainer::ccontainer(int i,int j,in...2009-12-22 19:17:00 · 395 阅读 · 0 评论 -
c++中的THIS
1、编译器只分配用于保存数据的内存,代码则被放在内存的公用区,可以为所有的对象共享。2、既然为共享,那么C++如何区分是该类的哪个对象在操作呢,通过THIS指针实现.3、可以通过下面方法,避免同一对象的赋值void ctest::assign(ctest &t){if (this==&t){//为同一对象赋值}else{//可以正常赋...2009-12-22 19:52:00 · 91 阅读 · 0 评论 -
C++ 学习心得(向量迭代对)[
extern int getsize();void mumble(){int size=getsize();vector vec(size);vector ::iterator iter=vec.begin();for (int ix=0; iter!=vec.end();++iter,++ix)*iter=ix;}解释:迭代器是一个支持指针类型抽象的类对象,iterator是vector类模板中...2009-12-22 20:32:00 · 129 阅读 · 0 评论 -
C++ 学习心得(常量与变量)
extern int getsize();void mumble(){int size=getsize();vector vec(size);vector ::iterator iter=vec.begin();for (int ix=0; iter!=vec.end();++iter,++ix)*iter=ix;}解释:迭代器是一个支持指针类型抽象的类对象,iterator是vector类模板中...2009-12-22 20:33:00 · 102 阅读 · 0 评论 -
C++ 学习心得(指针与引用)
1、指针(1) 指针定义:加前缀*。(2)指针使用:不加前缀表示指针本身,即物理地址;加前缀*表示解引用,即取物理地址指向的东东,根据指针类型是INT还是DOUBLE等来解引用,因为不同类型所占长度不同。当要仅仅只对不同类型的指针变量所指向的物理地址进行比较时,除函数指针外使用void*类型,因为不需要知道变量长度,只需要比较物理地址。(3)取地址操作:加前缀&,2、引用(1) 引用又叫别...2009-12-22 20:34:00 · 183 阅读 · 0 评论 -
C++ 学习心得(字符串)
1、一个错误的字符串程序#includeconst char *st="my name\n"int main(){int len =0;while (*st++) ++len;//正确,因为一旦*st为0,则表示遇到了字符串终止符0cout << len<<":"<//st=st-len-1;多减一个终止符的长度//cout<<":"<&2009-12-22 20:37:00 · 172 阅读 · 0 评论 -
c++学习心得(枚举)
定义:1、enum aa {input =1,output,append};//枚举值从1开始enum aa {input,output,append};//枚举值从0开始enum aa{input=1,output=3,append};//枚举值在一个定义中可以不唯一,在这里,output和append都为32、enum aa =input;aa=append;3、aa x=output;aa ...2009-12-22 20:38:00 · 100 阅读 · 0 评论 -
C++学习心得(数组,vector容器,typedef,volatile)
定义:int x[3][3];//定义3*3的数组int x[3][3]= {1,2,3,4,5,6,7,8,9};按次序赋值int x[3][3]={{1},{2},{3}};定义第一行的第一列数据int x[3][3]={1,2,3,4};除x[0][0]至x[1][1]外其余全为0int y[3][3];x=y//错误数组不能被数组赋值char ch[6]="hello";//字符终止符包括...2009-12-22 20:41:00 · 236 阅读 · 0 评论 -
c++学习心得(pair,操作符重载,this)
pair1、包括2个不同或相同类型的值2、#includepair xx("abc",123)xx.first;//第一个元素abcxx.second;//第二个元素123===========this类中的this指针被除数自动设置为指向左侧的类对象==========操作符重载1、定义return_type operator op(参数列表)2、可以防止自己拷贝给自己string& s...2009-12-22 20:52:00 · 528 阅读 · 0 评论 -
c++的sizeof
sizeof (type name)//类型的长度sizeof (对象) 和sizeof 对象// 对象的长度2009-12-22 21:05:00 · 77 阅读 · 0 评论 -
c++对象模型学习心得(几个可行的对象模型)
1、简单对象模型整个对象模型被分成很多个槽,每个放置一个成员的指针,或者是数据成员,或者是函数成员。成员的寻址方式是以第个槽的索引值来寻找,也就是说地址是对象的基址加上索引*指针大小。2、表格对象模型将数据成员和函数成员划分开来,数据成员集中放在一个表中,函数成员放在另一个表中。数据成员表存放实际数据,函数成员表中存放函数地址指针。3、C++对象模型(1)将非静态数据成员作为一类放在类对象中。所有...2009-12-22 21:05:00 · 93 阅读 · 0 评论 -
c++(位操作符)
1、按位非--expr2、左、右移<<,>>expr1<>expr2 将expr1左移或右移expr2位3、按位与,按位异或,按位或& , ^ ,|expr1&expr2 expr1^expr2,expr1|expr24、按位与,按位异或,按位或赋值&=,^=,|=...2009-12-22 21:07:00 · 109 阅读 · 0 评论 -
c++对象模型学习心得(初步继承模型)
1、在虚拟继承中,基类不管在继承串链中被派生过多少次,永远只存在一个实体,称为SUBOBJECT。2、继承的方案(1)每一个基类可以被它的派生类对象内的一个槽指出,该槽含有这个基类对象(BASE CLASS OBJECT)的地址,这样的话,派生类对象的大小不会因为其基类的改变而受到影响,因为派生类仅保存基类对象的指针,缺点是这样会导致存取时间和空间的负担,因为要多次存取才能取到基类对象。(2)生成...2009-12-22 21:07:00 · 94 阅读 · 0 评论 -
c++对象模型(关于STRUCT和CLASS)
1、STRUCT:可以利用这个关键字实现一些技巧,这些技巧是类所不具备的。比如可以形成一个空间拥有可变大小的数组。struct mumble{char pc[1];}struct mumbel *pmumbl=(struct mumble*) malloc(sizeof(structmumble)+strlen(string)+1);strcpy(pmumbl->pc,string);建立一...2009-12-22 21:08:00 · 107 阅读 · 0 评论 -
c++对象模型(多态1)
A a;B b;//B类是A类的子类a=b;//B的内容被A类对象进行裁剪,a仍然属于A类a.func();//调用的是A的函数必须用引用和指针,上述因为是在编译时就确定好了,所以调用的仍然是父类.A &a=b;a.func();//这样可以对多态的支持1、类型的隐含转化circle作为shap的子类shap *ps=new circle();2、经由虚函数机制ps->rotate(...2009-12-22 21:09:00 · 78 阅读 · 0 评论 -
python-位操作符,数值类型
本文将介绍Python语言的一种基本数据类型:数值类型。首先,我们会详细介绍Python语言各种数值类型以及相应的算术运算和它们的优先级、结合性。然后,我们还会对整型的位运算做深入的解释。一、 数值类型Python语言的数值类型有四种,分别是:整型、长整型、浮点型和复数类型。下面我们首先介绍整型数据。1.整型Python语言的整型相当于C语言中的long型,在32位机器上,整型的位...原创 2010-01-19 21:19:55 · 951 阅读 · 0 评论 -
python笔记-cmp、type、isinstance
示例:IDLE 2.6.4rc2 >>> type(4)<type 'int'>>>> cmp(3,2)1>>> cmp(20,30)-1>>> str(564.5154)'564.5154'>>> repr([21,54,8,9])'[21, 54, 8原创 2010-01-19 21:22:46 · 139 阅读 · 0 评论 -
f o r k函数
一个现存进程调用f o r k函数是U N I X内核创建一个新进程的唯一方法(这并不适用于前节提及的交换进程、i n i t进程和页精灵进程。这些进程是由内核作为自举过程的一部分以特殊方式创建的)。 #i nclude <sys/types.h>#i nclude <unistd.h>pid_t fork(void); ...原创 2010-01-20 08:23:39 · 215 阅读 · 0 评论 -
基于const的重载
1、基于成员函数是否为const,可以重载一个成员函数,同样基于一个指针形参是否指向const,可以重载一个函数。2、const对象只能使用const成员,非const对象可使用任一成员,但会更好的匹配非const版本3、比如:class Screen{ public: Screen& display(std::ostream &os){ ...2010-07-31 11:09:32 · 191 阅读 · 0 评论 -
C++-使用auto_ptr保证异常安全
void f(){ auto_ptr<string> ap(new string("异常安全,即使f()函数没有来得及运行string的析构函数"));}原创 2010-08-10 14:06:10 · 126 阅读 · 0 评论 -
C++-高级内存分配
C++-高级内存分配原创 2010-08-10 22:11:16 · 101 阅读 · 0 评论 -
C++-运行时类型识别
C++-运行时类型识别原创 2010-08-10 22:24:29 · 143 阅读 · 0 评论 -
C/C++ Web框架
C++ Web工具包 WtWt(音同&apos;witty&apos;)是一个C++库,同时也是开发和部署web应用的服务器。 Wt不是所谓框架(framework),它只是一个库,它不会将编程方式强加于开发者。 Wt的API是以widget为中心(widget-centric)的,并受到现有C++图形用户界面(GUI) 的应用编程接口(APIs)的启发。... 更多...原创 2010-08-10 22:26:40 · 4001 阅读 · 0 评论 -
const 与 #define 的比较
C++ 语言可以用const 来定义常量,也可以用 #define 来定义常量。但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。(2) 有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。z 【规则5-2-...原创 2010-02-21 11:51:40 · 80 阅读 · 0 评论 -
Ubuntu 10.04安装codeblocks版本10.05
Linux发行版是Ubuntu 10.04,codeblocks版本10.05,安装codeblocks需要wxWidgets库,具体步骤如下: 1、输入命令:curl http://apt.wxwidgets.org/key.asc | sudo apt-key add -Packages和软件仓库meta-data都是需要数字签名的,因此需要将Key导入到系统的apt信...原创 2010-08-21 13:13:58 · 143 阅读 · 0 评论