这本电子书是在国科大上课时候,老师在课件资源里边提供的。之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他。因此,我就格外注意这件事,但是没有认真搜索相关资料,现在有机会找到,当然会存下来。
学习C++已经有三个周期了,第一个周期学习的是简单MFC处理,也没有什么完整结果产出,倒是耗费了我两个周的时间去学一些例程。
第二个周期没学什么具体的方法,倒是对对象和类学得深入骨髓,对象和类就像月饼和模板的关系。有对象为什么会更快?就像盖楼一样,用砖头当然不如钢筋混凝土,而类的存在就是这“钢筋混凝土”,是相对来说更大的块。
第三个周期是真正的学习C++具体内容,把该掌握的基础语法都掌握了。这期间,我曾经想过抄袭,但还是咬牙把简单程序写完了,并且尽量做到“规整”,所以现在看到构造函数、虚函数等等有很具体的理解,入门也比较快。
学习笔记
不懂的地方
- 如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
掌握的新内容
目录结构:
可将头文件保存于include 目录,将定义文件保存于source 目录(可以是多级目录)
#include <math.h> // 引用标准库的头文件 #include “myheader.h” // 引用非标准库的头文件
变量赋值:
尽可能在定义变量的时候就进行赋值,可以防止后期忘记
空格:
对于表达式比较长的for 语句和if 语句,为了紧凑起见可以适当地去掉一些空格,如
for (i=0; i<10; i++)和if ((a<=b) && (c<=d))
我以前是不知道去掉空格的,用for的时候就很长。
指针型变量的写法:
int *x, y; // 此处y 不会被误解为指针
注释:
【规则2-7-6】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
【规则2-7-8】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。
类的声明:
对于类的声明来说,先写public函数,以便用户看到:
我建议读者采用“以行为为中心”的书写方式,即首先考虑类应该提供什么样的函数。这是很多人的经验——“这样做不仅让自己在设计类时思路清晰,而且方便别人阅读。因为用户最关心的是接口,谁愿意先看到一堆私有数据成员!”
命名规则:
命名规则对我来说是新的,我以前在win程序和unix程序命名规则之间徘徊,现在有了明确的方案:
单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z 等,它们通常可用作函数内的局部变量。
- 类的成员函数:
【规则3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。
类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。
例如:
DrawBox(); // 全局函数
box->Draw(); // 类的成员函数
【建议3-1-1】尽量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。
- 完整规则:
【规则3-2-1】类名和函数名用大写字母开头的单词组合而成。
【规则3-2-2】变量和参数用小写字母开头的单词组合而成。
【规则3-2-3】常量全用大写的字母,用下划线分割单词。
【规则3-2-4】静态变量加前缀s_(表示static)。
【规则3-2-5】如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。
【规则3-2-6】类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。
【规则3-2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL 的所有库函数均以gl 开头,所有常量(或宏定义)均以GL 开头。
if语句:
- 布尔变量不可以与零比较;
- 整形变量可以与零比较,但是不能用“!a”的形式;
- 不可将浮点变量用“==”或“!=”与任何数字比较;
- 应当将指针变量用“==”或“!=”与NULL 比较,虽然NULL==0,但是应该将指针变量区分出来;
if (condition)
return x;
return y;
是可用的,但是不规范,而且可以改为更简洁的表达方式:
return (condition ? x : y);
循环语句的效率:
【建议4-4-1】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数。
【建议4-4-2】如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
电子书前5章
学习时间:2PT
整理时间:1PT
2018年3月7日16:01:00
第7章 内存管理
主要了解了内存的三个区,以及指针和数组的区别,其中指针是指向某个地址,可以是变量也可以是常量,而数组是开辟一个空间并且赋值。
其中,函数在栈上生存,所以函数内的变量的地址是流动的,生存周期在这个函数内。