《高质量C++&C 编程指南》学习笔记

时间:2022-08-21 13:36:27

这本电子书是在国科大上课时候,老师在课件资源里边提供的。之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他。因此,我就格外注意这件事,但是没有认真搜索相关资料,现在有机会找到,当然会存下来。

学习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】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。

《高质量C++&C 编程指南》学习笔记

类的声明:

对于类的声明来说,先写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章 内存管理

主要了解了内存的三个区,以及指针和数组的区别,其中指针是指向某个地址,可以是变量也可以是常量,而数组是开辟一个空间并且赋值。

其中,函数在栈上生存,所以函数内的变量的地址是流动的,生存周期在这个函数内。

《高质量C++&C 编程指南》学习笔记

《高质量C++&C 编程指南》学习笔记