C++ Primer Plus6学习笔记(第一章/第二章)

目录

第一章:预备知识

书本知识点

1. 低级语言和高级语言的含义及区别

2. 面向过程和面向对象编程的区别

3.泛型编程含义

4.其它

知识点拓展

1.面向对象和面向过程

2.从文件到可执行程序

3.一些术语

第二章:开始学习C++

书本知识点

【1】第一节知识点摘录

【2】第二节知识点摘录

【3】第三节知识点摘录

【4】第四节知识点摘录


第一章:预备知识

        当我们在学习新知识时,脑袋总会不自觉冒出两个提纲挈领的问题——是什么及为什么

        是什么意味着我们希望先得到知识的框架,这样利于我们建立体系;而为什么则意味着我们希望深入更多细节(包括但不限于其发展历程,其各种特征等),以抵达该知识的本质。

        第一章就是1.什么是C++ 2.为什么是C++?的概括性回答。

第一个问题的书面回答是:C++是C的超集,在C的基础上发展而来,是融合以C为代表的面向过程编程,自身以类为代表的面向对象编程和泛型编程的一种新编程语言。

        而用Bjarne Strousstrup(C++之父)的话说,“C++主要是为了我的朋友和我不必再使用汇编语言、C语言或其它现代高级语言来编程而设计的。它的主要功能是可以更方便的编写出好程序,让每个程序员更加快乐。”所以,今天你更加快乐了吗?如果没有,那就多看看C++他爹的主页吧  :)https://www.stroustrup.com/

站在巨人肩膀上有时并不能说明巨人很高,而恰恰相反说明站在巨人肩膀上的我“高”,巨人较“矮”,吾可将其所长与所不长一览无余。正因为C之所不长,所以才有C++。C++在C的基础上发展而来,想更好的回答第二个问题,就不免要先了解C。于是书本从C到C++的简要发展讲起,引出各种知识点。其中一个重要的知识点是:面向对象和面向过程编程思想的区别


个性无序的 --> 结构化的 --> 抽象的 

        在计算机之初,编程多是一种小众化高度专业化的个性任务。为使计算机拥有自己需要的功能,最初的程序员使用汇编(低级)语言或原始的高级语言(如FORTRAN),在自己能理解且能稳定运行的基础上随意开发(现在听起来匪夷所思,但对于最初简单朴素的任务而言却合理)。

        随着计算机商业需求升级,这种个性开发方式成为一种阻碍,需要一种新的规则将大型商业开发工作的各个机体统筹协调起来,于是结构化编程思想被引入。当任务繁复,代码量从几万行膨胀到数十万行时,结构化编程或许尚能完成。但由于结构化编程强调算法(即处理事物的逻辑流程),自顶向下编程等特点,很易把数据和操作过程杂合在一起,使得软件结构臃肿复杂,高层设计过于依赖底层实现,且牵连甚广,不好维护等弊端逐渐显现。

        而随着发展,计算机更多的用于处理非数值的任务,复杂度更高且交互更紧密。急需一种手段,将复杂任务的本质抽象出来,并使之具有私密安全,低耦合,易管理,易组装等一系列必要特性,于是面向对象的思想应运而生。由于面向对象是自底向上编程强调数据,其从低级组织走向高级组织,有效区分了数据和算法,将任务本质抽象成数据对象之间合理的交互,所以更适用于管理大型复杂的工程,同时更适用于对复杂的现实世界抽象。

书本知识点

        C和C++是上世纪70-80年代诞生在贝尔实验室中的开发语言,C等语言引领人们进入了结构化编程的时代。开发语言从无序到有序再到抽象的发展,引出低级语言和高级语言的概念,以及C语言面向过程和C++面向对象等各自特点,再进一步阐发各特点的具体含义。由于语言是一种工具,而想要使其在发展过程中保持向前兼容则需要一种标准进行制约,故作者进一步简单介绍了可移植性和标准(ISO的),之后简要介绍了从C++源码到其可执行程序的简要编译链接过程。编程技术的进化,其本质就是编程思想的进化。

拓展:C语言原型是A语言(ALGOL 60语言)。

1963年,剑桥大学将ALGOL 60语言发展为CPL(Combined Programming Language)语言。

1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。

1969年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,提炼出它的精华,并为它起了一个有趣的名字“B语言”。并且他用B语言写了第一个UNIX操作系统。

而在1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

1. 低级语言和高级语言的含义及区别

        汇编语言依赖于计算机的内部机器语言,是针对特定的计算机处理器,直接操作硬件的低级语言,是机器能直接读懂,对机器友好的,所以称之为低级。

        高级语言致力于解决问题,而不针对特定的硬件,需要特定的编译器程序进行翻译,才能被机器读懂,其是对人类友好的,所以称之为高级。

2. 面向过程和面向对象编程的区别

        过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这种操作,强调的是算法,是自顶向下的。与强调算法不同的是OOP强调的是数据,OOP程序设计首先设计类,它们表示了程序要正确处理的某种数据格式。OOP不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的需求。注:从低级组织(如类)到高级组织的处理过程叫做自底向上的编程。相反是自顶向下。

        当然OOP不仅仅指的是类(数据和方法),还有继承、多态,泛型编程等,这一些列特性使得OOP在减少重复性代码工作,易维护性,数据隐藏等优势明显。C++真正的优点之一是:可以方便的重用和修改现有的、经过缜密测试的代码。

3.泛型编程含义

        泛型编程(Generic Programming)是C++支持的一种编程模式。它与OOP的目标相同,即使重用代码和抽象通用的概念更简单。不过OOP编程强调的是编程的数据方面,而泛型编程强调的是独立于特定的数据类型。它们侧重不同,OOP是管理大型项目的工具,而泛型编程提供了执行常见任务(如对数据排序或合并链表)的工具。术语泛型是指创建独立于类型的代码。

        术语泛型指的是创建独立于类型的任务代码。如一个排序泛型,不论处理对象是int、float亦或自定义类型,都可调用该排序函数实现排序。

4.其它

        改正编译错误时应首先改正第一个错误,如果标记错误的那行找不到错误,请查看前一行。 


知识点拓展

1.面向对象和面向过程

        面向对象与面向过程的本质的区别_面向对象和面向过程的区别-CSDN博客

2.从文件到可执行程序

        GCC编译器驱动程序从读取源程序文件,到将其翻译成可执行目标文件的过程分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。执行这四个阶段的程序(预处理器、编译器、汇编器、和链接器)一起构成了编译系统。

       源程序到可执行程序的编译过程_编译程序工作过程中,目标代码生成遵循的规则-CSDN博客

3.一些术语

        机器指令:CPU能直接识别并执行的二进制编码

        汇编指令:汇编指令是机器指令的助记符,同机器指令一一对应。

        编译器:够将汇编指令转换成机器指令的翻译程序,每一种CPU都有自己的汇编指令集。

        汇编语言是汇编指令和语法的集合

        在内存或磁盘上,指令和数据没有任何区别,都是二进制信息


第二章:开始学习C++

        如何快速了解并掌握一种工具呢?我的答案是具象化并使用它。就好比学习外语,在拥有一些基本词汇和语法后,多听并与他人模拟对话便能很快将该语言掌握。

        本章就是一个具象化的入门过程。从一个典型C++文件出发,简明剖析出C++的一些基本结构和语法知识,从而达到让读者迅速正确完整创建一个C++程序,并正式进入C++学习之旅的目的。

        第一节从myfirst.cpp源码开始,从头到尾分析了main()函数的框架结构。分别引出了输入输出、头文件、注释、预处理及名称空间等概念。并强调一个良好的程序,不应该是随心所欲的,而应该是符合一定规范的,这样便于阅读。

        因为函数是由一条条具体语句组成的,所以第二节第三节便深入进函数的语句进行分析。通过语句的具体含义和规则引出了声明语句、赋值语句、变量等概念,并阐述了部分概念在C与C++中的不同。在简要介绍完C++中的cin、cout后引出了类,作为后续学习的预先了解知识。

        第四节便进一步讲到程序的模块--函数。作为完成任务的基本模块,函数的重要程度不言而喻。本节概要性的阐述函数的作用、函数的分类、函数原型与函数定义的区别、关键字、库函数和using编译指令函数等概念。

书本知识点

【1】第一节知识点摘录

        1.1 C++是大小写敏感的语言

        1.2 函数的函数头对函数与程序其他部分之间的接口进行了总结,描述了函数与调用它的函数之间的接口。函数头()里的是参数列表,用于传递函数调用之间所需的信息。函数体是指出函数应做什么的计算机指令。

        mian()函数头描述的是程序与操作系统之间的接口,由编译器添加到程序当中的启动代码调用。通常,main函数被启动代码调用,而启动代码是编译器添加到程序当中的,是程序和操作系统之间的桥梁,该函数描述的是程序和操作系统之间的接口。

        1.3 在C++中,让括号空着与在括号中使用void等效。在C中,让括号空着意味着对是否接受参数保持沉默。

        1.4 输入cin输出cout都是各自流对象的实体,流即流入程序或从程序流出的一系列字符。cout是在iostream文件中定义的,其属性包括一个插入运算符(<<),它可以将其右侧的信息插入到流中。因此,与其说程序显示了一条消息,不如说它将一个字符串插入到了输出流中。

【2】第二节知识点摘录

        2.1 声明通常指出了要存储的数据类型和程序对存储在该处的数据使用的名称。要将信息存储在计算机中,必须指出信息的存储位置和所需的内存空间。C++的声明语句是一种便捷方式。

        定义声明(defining declaration)语句,简称为定义(definition),变量的定义意味着编译器将为其分配指定类型大小的内存空间。在较为复杂的情况下,还可能有引用声明。

【3】第三节知识点摘录

        3.1 类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。

        3.2 C++提供了两种发送信息的方式:一种是类方法,一种是运算符重载。

【4】第四节知识点摘录

        4.1 C++的函数可分为有返回值和无返回值两种。在有些语言中,有返回值的函数被称为函数(function),没有返回值的函数被称为过程(procedure)或子程序(subroutine)。

        4.2 函数原型和和函数定义概念不同,原型只描述函数接口,即函数如何与程序的其他部分进行交互,也即函数接受和发出的信息。而函数定义包含该函数的完整具体实现。C++应当为程序中使用的每个函数提供原型。

        被调用的函数被称为被调用的函数,包含调用函数的函数被称为调用函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值