C++ 编程思想(第一卷)阅读总结

最近工作闲翻阅了之前买f《C++编程思想》这里贴上我认为对我最有帮助的部分,一来留给自己复习看,另一方面也和小伙伴们分享下:

1 OPP相关

1.1、每个对象都有一个类型,OOP中class 和type是同义词,在面向对象的程序设计中,我们所做的工作实际上就是创造新的数据类型,程序员定义class 是为了与具体问题相适应,而不是被迫适用已存在的数据类型。

1.2、当用<>来指定文件时,预处理器以特定的方式来寻找文件,一般是环境中或者编译器命令指定的某种寻找路径;当采用""指定文件时,通常是从当前目录开始寻找,如果文件没有找到则按<>方式进行寻找。

2 C++总的C

2.1、整数类型范围从小到大为:short int->int->long int。

浮点类型范围从小到大为:float->double->long double;

unsigned 数不保存符号,因此有一个多余的位可用,所以它能存储比signed数大两倍整数

2.2、main()的内部和外部定义的变量存放在不同的区域;数据和函数也存在不同区域

2.3、C++编程的一般原则是在定义时进行初始化,const 变量必须有初始值

2.4、enum可以提高程序清晰度,采用union可以节省内存,所有union 变量地址都是一样的

2.5、 采用预处理器来完成代码调试功能,具体实现如下:

#define NDEBUG
//......
#ifdef NDEBUG
/* debugging code here*/
......
#endif

2.6、C++允许将任何类型的指针赋给void* ,但是不允许将void* z指针赋值给其他任何类型的指针。

2.7、同文件是我们和库用户之间的合约,合约描述了库中的数据结构,为函数调用规定了参数和返回值,头文件中只限于申明,为了避免头文件的内容的多次申明,我们可以采用如下方式避免:

#ifndef HEADER_FLAG
#define HEADER_FLAG
//Type declaration here
.....
#endif

同样为了避免命名空间的错乱,头文件中绝不会看到using

2.8、如果程序员想允许显式让不属于当前结果的一个成员函数访问当前结构的对象时,可以借助friend 修饰符,friend 必须在一个结构内部声明

3 、C++特色:

3.1、class与struct 的区别在于class的成员默认是private,而struct的成员默认是public;

3.2、C++的安全性体现在初始化和清除两个方面,用构造函数确保初始化,用析构函数确保清除

3.3、C++中宏被内联函数(inline function)代替,这样既保证了高效性(成员函数和预处理器宏一样高效)也保证了安全性(当调用内联函数时,编译器首先确保调用正确,即所有的参数类型都满足,宏定义在预处理中,不能进行检查)。

任何在类中定义的函数都自动的成为内联函数;

使用内联函数的目的是减少函数调用的开心,但是如果函数交大,由于需要在调用函数的每一处重复赋值代码,这样会使得代码膨胀,因此小函数作为内联函数比较理想

3.4、static使得变量存于静态数据区中,而不是堆栈中。全局静态对象的构造函数在main()之前调用,并且在退出main()后调用析构函数;

3.5、 关键字namespace如何class、struct、enum和union一样把它们的成员的名字放到不同的空间去,但namespace与class 、struct、union和enum有着明显的区别:

(1)namespace只能在全局范围内定义,但他们之间可以相互嵌套;

(2)namespace定义的结尾不必跟着分号;

(3)一个namespace可以在多个头文件中用一个标识符来定义;

(4)不能像class一样去创建一个名字的实例;

(5)namespace可以用另一个名字作为他的别名;

3.6、 & 在C++表示引用,引用可以理解为一个奇特的指针,这个指针的优点是不必怀疑它是否初始化,引用的使用规则如下:

(1)应用创建是必须初始化;

(2)一个引用指向一个对象后不可转变为另一个对象的引用;

(3)不能NULL的引用

最经常看见引用的地方是函数参数和返回值中,当引用被用作函数参数是,在函数内任何对引用对象的修改将在函数外参数发生变化,当然也可传递指针来做相同的事情,但引用具有更清晰的语法。

3.7、拷贝构造函数(copy-constructor)是一种特殊的构造函数,需要引用来实现从现有的相同类型的对象中产生新的对象。编译器使用拷贝构造函数通过值传递的方式在函数中传递和返回对象

3.8、使用delete void * 可能会出错,在删除之前必须把它转为适当的类型,否则将会丢失内存;

3.9、C++确保在进入新类的构造函数体之前调用酥油的其他的构造函数,这样所有子对象的成员函数所做的任何调用总是转到这个被初始化的对象中,

MyType::MyType(int i):Bar(i){///....}

4 C++ 中的多态

4.1、多态永远发生在派生类中与基类之间,C++通过virtual函数和晚绑定(late binding)实现;

如果一个函数在基类中被申明为virtual ,那么所有的派生类中它都是virtual,可以对基类中的虚函数进行重写;

在每个带有虚函数的类中,编译器秘密放置了一个指针(vpointer)指向该对象的VTABLE(编译器对每个包含虚函数的类创建一个表:VTABLE)

编译器从Instrument指针开始,该指针指向该对象的起始地址,对于所有的Instrument或派生对象,他们的vptr都存在相同的位置(常常在对象的开头),所以编译器能够取出该对象的vptr,vptr指向vtable的起始地址,所有的vtable都有相同的顺序,如图。play()第一个,what()第2个;

5、C++模板(template)

5.1、template告诉编译器,随后定义将错做一个或者多个未指明的类型,当这个模板产生实际类代码时,必须指定这些类型使得编译器可以替换他们。

时间: 2024-11-08 20:53:01

C++ 编程思想(第一卷)阅读总结的相关文章

Java 编程思想 第五章 ----初始化与清理(1)

从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来. 5.5 清理:终结处理和垃圾回收 初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全.Java有自己的垃圾回收器负责回收无用的对象占据的内存资源.但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法.       工作原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首

关于阅读java编程思想和effective java的一些看法

个人认为,java编程思想并不适合当作新手入门书籍来看,它更多是像给已经使用过java的人群对于基础的一些查缺补漏,有点像一本大部头的工具书,目前该书已看至第十章 -- 内部类, 而effective java这本书,更多是如所说的,是一本分享经验与指引你避免走弯路的经典著作,针对如何编写高效.设计优良的程序提出了最实用.最权威的指导方针,目前该书只看至第三章.我本来是想看完一个章节来写一个读书笔记,但目前来看,这样不合适,都是经典书籍,好书就该多读几次,所以第一遍初读只是大概了解书籍所讲的内容

Swift 编程思想 阅读笔记

Swift 编程思想,第一部分:拯救小马html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { overflow-y: hidden; overflow-x: auto; } .CodeMirror-lines { padding: 4px 0px; } .CodeMirror pre { padding: 0px 4px; } .CodeMirror-scrol

C++学习书籍推荐《C++编程思想第二版第一卷》下载

百度云及其他网盘下载地址:点我 编辑推荐 "经典原版书库"是响应教育部提出的使用原版国外教材的号召,为国内高校的计算机教学度身订造的.<C++编程思想>(英文版第2版)是书库中的一本,在广泛地征求并听取丛书的"专家指导委员会"的意见后,我们最终选定了这30多种篇幅内容适度.讲解鞭辟入里的教材,其中的大部分已经被M.I.T..Stanford.U.C.Berkley.C.M.U.等世界名牌大学采用. 作者简介 作者:(美国)埃克尔 目录 Preface1:

编程思想与算法

常用编程思想与算法 本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的事例,对基础算法感兴趣的朋友可以阅读原文.由于本人也是编程初学者,所以本书比较浅显易懂,所介绍的算法配上插图也十分易懂,这里只是介绍几种最基础的算法由浅入深以帮助理顺一些简单的思维逻辑. 算法简介 算法是一组完成任务的指令.任何代码片段都可视为算法,我们这里讨论的算法要么速度快,要么能解决有趣的问题,要么兼而有之. 二

《Java编程思想(第4版)》pdf

下载地址:网盘下载 内容简介 编辑 本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形.从Java的基础语法到最高级特性(深入的面向对象概念.多线程.自动项目构建.单元测试和调试等),本书都能逐步指导你轻松掌握.[1] 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作.本书的作者拥有多年教学经验,对C.C++以及Java语言都有独到.深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概

CSDN日报20170503 ——《我过去的那些编程思想》

[程序人生]我过去的那些编程思想 作者:张侦毅 我从开始工作,直至现在已经可以说有好几年了,所以说谈谈我过去的那些编程的思想,算是个人工作历程的一段总结吧. 点击阅读全文 [Web 前端]唯快不破:提升Web 应用的 13 个优化 作者:音韵者天 时过境迁,Web 应用比以往任何时候都更具交互性.搞定性能可以帮助你极大地改善终端用户的体验.阅读以下的技巧并学以致用,看看哪些可以用来改善延迟,渲染时间以及整体性能吧! 点击阅读全文 [机器学习]Adaboost 算法原理分析和实例+代码(简明易懂)

IOS编程思想的概念

iOS几大编程思想 面向对象思想:万物皆对象,做一件事情的过程转变为对象处理事件的过程. 链式编程思想:将多个操作通过点(.)链接在一起成为一句代码,使得代码更好阅读.例如p.add(1).add(2).特别的地方在于每个方法返回一个block,这个block的返回值又是这个对象本身,block的参数需要自己考虑实际情况.这里在多讲一下,为什么add后面要加括号,还有参数.其实这个就是调用了这个block(block的调用就是括号,里面添加参数).其代表最出名的第三方框架是Masonry.不懂的

【java编程思想--学习笔记(四)】对象导论

写这篇博客的前言: 长话短说,我希望通过阅读<java编程思想>来使我的代码 简洁可用 . 目的的层次不同,首先具体的目标是,了解Java的特性和巩固Java的基础. 更抽象的目的如下: 1.期待以巩固基础的方式,使代码优美,简洁,高效. 2.使自己写的模块能够开放适度,好用. 3.形成一种对代码是否优美的审美观. 于是<Java编程思想>第一章 对象导论 由此开始. 1.1 抽象过程 java 相对于命令式语言的优势在于只针对于待解问题建模.后者所做的主要抽象要求所做问题基于计算