1、C++基础与编程规范
规范:
1.2 在每个类声明之后、每个函数定义结束之后都要加空行
void Function1()
{
}
void Function2()
{
}
1.3
一行代码只做一件事情,如只定义一个变量,或只写一条语句
if、for、while、do 等语句自占一行,执行语句不得紧跟其后
在定义变量的同时初始化该变量
赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符
程序的分界符‘{’和‘}’应独占一行并且位于同一列
void Func1(int x, int y, int z); // 良好的风格
{
}
void Func1 (int x,int y,int z); // 不良的风格{
}
应当将修饰符 * 和 & 紧靠变量名
int *x, y;
// 此处 y 不会被误解为指针
块的注释常采用“/*...*/”
行注释 一般采用“//...”
类名和函数名用大写字母开头的单词组合而成。
变量的名字应当使用“名词”或者“形容词+名词”
变量和参数用小写字母开头的单词组合而成
常量全用大写的字母,用下划线分割单词
静态变量加前缀 s_(表示 static)
float oldValue;
float newValue;
1.1、头文件的结构
1.1.1 为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处 理块。
1.1.2 #include <filename.h> 格式来引用标准库的头文件
1.1.3 用 #include “filename.h” 格式来引用非标准库的头文件
1.2 if(flag) //表示flag为真 if (!flag) // 表示 flag 为假
if (flag == TRUE) if (flag == 1 ) //不良的
1.3 浮点变量与零值比较
不可将浮点变量用“==”或“!=”与任何数字比较。
if ((x>=-EPSINON) && (x<=EPSINON))
其中 EPSINON 是允许的误差(即精度)。0.00000001
1.4 指针变量与零值比较
if (p == NULL) if (p != NULL)
1.5 const 与 #define 的比较
const 的作用:只读 三种方式
const常量有数据类型,而宏常量没有数据类型
1.5 函数三种传递参数的方式
指针 引用 值传递
2 内存管理
内存分配的三种方式
静态存储区域分配 : 全局变量,static 变量
在栈上创建: 函数内局部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放
堆上分配,亦称动态内存分配 malloc/free new/delete 自已释放
内存常见错误
内存分配未成功,却使用了它,应该用 if(p != null)
内存分配虽然成功,但是尚未初始化就引用它
内存分配成功并且已经初始化,但操作越过了内存的边界 //类似数组
忘记了释放内存,造成内存泄露 //malloc/free new/delete 必须成对出现
释放了内存却继续使用它 //1 return 语句 2 没有将指针设置为 NULL
void getMemory(char *p)
{
p = (char *) malloc(100);
}
void test()
{
char *str = NULL;
getMemory(str);
strcpy(str, "hello");
}
char *getMemory()
{
char *p = (char *) malloc(100);
return p;
}
野指针
“野指针”不是 NULL 指针,是指向“垃圾”内存的指针
1.指针变量没有被初始化
2.指针 p 被 free 或者 delete 之后,没有置为 NULL,让人误以为 p 是个合法的指针
3 c++支持函数重载 重写
4.
A(void); // 缺省的无参数构造函数
A(const A &a); // 缺省的拷贝构造函数
~A(void); // 缺省的析构函数
A & operate =(const A &a);// 缺省的赋值函数
构造函数与析构函数的调用顺序
拷贝构造函数与赋值函数 如果用默认的, 当类中有指针变量的时候,会出现问题
可以把这两个函数设置成private
类的继承与组合
继承 是is a 的关系
组合 是has a 的关系
建议
使用 const 提高函数的健壮性
用 const 修饰函数的参数
用 const 修饰函数的返回值
c++ 学习点
猜你喜欢
转载自eyeshot.iteye.com/blog/1880647
今日推荐
周排行