来了csdn很久了,都没写过文章,有点过意不去,于是逼着自己这个懒人写了一下一些保留在个人笔记本上的小点滴,希望不会误导大家。。。。。一下只是笔记中的一小部分,以后有空在继续放上来。。。。。。
1 虚函数是为了继承接口和默认行为。纯虚函数只是继承接口,行为必须重新定义。
2 集和多集的区别:set支持唯一键值,set中的值都是特定的,而且只出现一次;而multset中可以出现副本键,同一个值可以出现多次。
3 map的节点是一对数据。
set的节点是一个数据。
set中的key和value是key类型的。
map中的key和value是一个pair结构中的两个分量。
4 c++的一般规则是,除了以typename修饰之外,template内的任何表示符号都被视为一个值而非型别。
5 静态成员变量的初始化应该在主函数调用之前,并且不能在类的声明中出现。
类的静态成员是属于类的而不是属于一般对象的,静态成员的状态不会随着一个新的对象的新建而重新定义。
6 静态成员函数由于与对象无关,所以在其中是不能对类的普通成员进行操作的。
静态成员函数与普通成员函数的区别在于缺少this指针。
7 友元的作用是提高程序的运行效率(即缺少类型检查和安全性检查)。
一个函数可以是多个类的友元函数,只要在各个类中分别声明即可。
当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一个类的友元类。
8 #ifndef<标识>
#define<标识>
。。。。。。。
。。。。。。。
#endif
上面标识的作用是:当你有几个cpp文件,而这几个文件都include同一个头文件,而编译时这几个cpp文件都要一同编译成可执行文件,这时会出现大量声明冲突,所以就要用到上面标识来解决问题。
9 如果使用delete时未加中括号,delete便假设删除的是单一对象,否则便假设删除的对象是个数组。
10 面向对象程序设计的重点是类的设计,而不是对象的设计。
11 断言几个原则(assert)
(1)使用断言捕捉不应该发生的非法情况。
(2)使用断言对函数的参数进行检查。
12 在用delete或用free释放指针所指内存后,应该显式地将指针置为null,以防下次使用时发生错误。
13 引用传递的性质像指针传递,而使用方法却像值传递。
14 return语句不可以返回指向“栈内存”的指针或者引用,因为该内存在函数体内结束时被自动销毁。
15 一旦引用被初始化,就不能改变引用的关系。
16 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。
如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”。
17 参数缺省值只能出现在函数的声明中,而不能出现在定义体中。
18 调用约定是指调用一个函数时,函数的参数压入顺序,谁来清理栈的内容等。默认的c,c++调用约定_cdecl,参数从右到左。
而_stdcall(win api)则从左到右。
19 vc对在堆上分配的内存都做了记录,主要用于free,delete释放的内存时做归还处理。如:
char *p=(char*)malloc(100);
p+=10;
free(p);
当执行以上代码时,p已经发生改变,所以提交到free的指针值已经变化,程序崩溃。
20 vc6.0对友元的支持不好,所以可以将友元函数的定义放到类里面。
21 不要忽略编译器的警告信息。
22 虚拟函数必须是类成员函数。
绝对不要让operator>>和operator<<成为其成员函数。
23 尽可能避免对一个数值型别和一个指针型别进行重载。
个人百度blog:http://hi.baidu.com/hljleo
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hljleo/archive/2009/09/28/4608093.aspx