《高质量C++&C 编程指南》学习笔记
这本电子书是在国科大上课时候,老师在课件资源里边提供的。之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他。因此,我就格外注意这件事,但是没有认真搜索相关资料,现在有机会找到,当然会存下来。
学习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章 内存管理
主要了解了内存的三个区,以及指针和数组的区别,其中指针是指向某个地址,可以是变量也可以是常量,而数组是开辟一个空间并且赋值。
其中,函数在栈上生存,所以函数内的变量的地址是流动的,生存周期在这个函数内。
《高质量C++&C 编程指南》学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- huawei USG防火墙子接口技术的应用案例
网络拓扑: 在中小企业的办公网络的设计中,通常为了安全考虑,需要将不同部门之间的互访的流量经过防火墙中转,同时结合vpn stance将业务进行隔离,在本例中,使用两台USG防火墙做HA作为整个办公网 ...
- JVM学习04:类的文件结构
JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理
- VS2017用正则表达式替换多行代码
await IndexManyAsync\(item.Value, item.Key, "doc"\);\r\n.*\}.*\r\n.*\} 上面的代码,匹配的是下面的代码 awa ...
- UILabel设置富文本后不显示省略号
先描述一下问题,项目中用到了UILabel去显示一段富文本文字,超过label显示区域部分,省略号处理. 但是当设置好 attributedText 给label之后,显示出的效果是文字被切割了,并没 ...
- leetcode5:最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- Connection failed Flowsocketconnector Failed to connect to target addressWindows error10061:由于目标计算机积极拒绝,无法连接
使用bitbise时报上面错误 : 解决方法 :卸载软件并删除相关的文件 (包含bitvise 及注册表中的文件)重新安装后能连接
- spring 406 (Not Acceptable)错误
@Controller @RequestMapping("/login") public class LoginController { @ResponseBody @Reques ...
- GUI学习之九——QLineEdit的学习总结
我们在前面学习了各种按钮控件,从这一章开始就是各种输入控件的学习. 首先要用的就是QLineEdit——单行编辑器, 一描述 QLineEdit是一个单行文本编辑器,允许用户输入和编辑单行纯文本.自带 ...
- SpringSecurity入门demo
配置依赖: <properties> <spring.version>4.2.4.RELEASE</spring.version> </properties& ...
- dom4j移除节点不成功
在使用dom4j的时候想移除xml节点,经常使用remove来移除节点,通过整个文档或者根节点删除某一个子节点,但如果子节点不是儿子节点,在dom4j中就无法删除.在dom4j中移除节点必须使用父节点 ...