1、添加
#ifndef _XXX_H_
#define _XXX_H_
.....
#endif
至头文件,防止头文件被重复引用而引起的重定义问题
2、#include<XXX.h>
将从标准库目录开始搜索
#include"XXX.h"
是从用户工作目录开始搜索
3、浮点数与0值比较:
无论float还是double变量,都有精度限制,不能直接用‘=’或者‘!=’来与数字比较,应该设法转化为“>=”或者“<=”形式。
eg:
if((x>=-EPSION) && (x<=EPSION))
//EPSION是精度,一般取0.000001
4、const与#define比较
C++语言可以用const来定义常量,也可以用#define来定义常量,但是前者有更多的优点
i、const有数据类型,编译器可以对其进行类型安全检查;#define没有数据类型,只是在编译时进行符号替换,因此也没有数据类型安全检查
ii、有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试
5、如果参数是指针,且仅作输入时使用,则应该类型前加上const,防止该指针在函数体内被随意修改
6、如果函数输入参数以值传递方式传递对象,则宜改为“const &”方式来传递,这样可以省去临时对象的构造与析构过程,从而提高效率
7、防止内存耗尽
i、判断指针为空,则马上return来终止函数:
void fun(void){
A *a = new A();
if(a==nullptr)return;
}
ii、判断指针为空,则马上调用exit(1)来终止整个程序运行
void fun(void){
A *a = new A();
if(a==nullptr)exit(1);
}
8、重载、覆盖与隐藏
i、成员函数被重载的特征:
- 相同的范围(在同一个类中)
- 函数名字相同
- 参数类型或(和)者个数不同
- virtual关键字可有可无
ii、成员函数被覆盖的特征
- 不同的范围(分别位于派生类与基类)
- 函数的名字形同
- 参数形同
- 基类必须有virtual关键字
iii、隐藏规则
- 如果派生类的函数与积累的函数同名,但参数不同,此时,无论有无virtual关键字,基类的函数将被隐藏
- 如果派生类的函数与基类函数同名,且参数也相同,但是基类没有virtual关键字,基类的函数将被隐藏