C++学习-入门到精通-[0]计算机和C++简介
计算机和C++简介
- C++学习-入门到精通-[0]计算机和C++简介
- 一、计算机的组成
- 二、硬件和软件
- 三、数据的层次结构
- 四、机器语言、汇编语言和高级语言
- 五、C++标准库
- 六、面向对象技术
一、计算机的组成
计算机是由多个不同功能的逻辑单元组成的:
逻辑单元 | 功能描述 |
---|---|
输入单元 | 从各种输入设备获取信息(数据和计算机程序),并将这些信息交给其他单元处理 |
输出单元 | 取得计算机处理好的信息并将它们输送到各种输出设备上,以便用户在计算机外部使用 |
内存单元 | 这是计算机用于保存信息的仓库,可以进行快速存取但它的容量不大。它可以保存输入设备输入信息,在需要时可以快速获取;也可以保存处理好的信息,直到输出设备将它们输出;注意,内存中保存的信息并不是永久的,它会随着计算机的关闭而丢失 |
算术逻辑单元 | 负责加、减、乘、除等运算;还可以进行一些判断,比如,可以比较两个内存单元中的值是否相等,在现在的计算机中,算术逻辑单元(ALU)通常是CPU的一部分 |
中央处理器 | 负责协调和监督其他各个部分的操作;比如,CPU会告诉输入单元何时将信息读入内存单元 |
辅助存储单元 | 这是计算机中长期性的、大容量的信息仓库;辅助存储单元中的信息是永久存储的,计算机关闭之后仍能存在,但是要读取保存在这上面的信息读取效率远不及内存单元的读写速度 |
二、硬件和软件
计算机是在一系列的指令的控制下处理数据的,这此指令被称为计算机程序,而在计算机上运行的程序叫做软件;
一台计算机在物理上是由各种设备共同组成的,如键盘、鼠标、显示器、硬盘、内存、CPU等。这些设备总称为硬件;
三、数据的层次结构
层次 | 描述 |
---|---|
位(Bit) | 计算机中最小的数据项,可能的数值为0或1,这样一个数据项称作一个位; |
字符(Character) | 二进制位是计算机可以处理的数据形式,但是人类更习惯于处理像十进制数字(0-9),字母(a-z, A-Z)和特殊字符(@,#等等)这类数据,所以将数字、字母和特殊符号称为字符;二进制数据通过编码可以转换成字符; |
字段(Field) | 正如字符由位构成一样,字段也是由字符构成的;一个字段由一组有意义的字符组成 |
记录(Record) | 若干个字段可以组成一个记录;比如,一个学生的记录由他的名字、性别、年龄、学号这几个字段组成 |
文件(File) | 一个文件能够保存多个记录;比如一个学生名册文件中就保存了多个学生的记录 |
数据库(Database) | 一个数据库是一个电子化的数据集合,对它的组织要便于访问和操作 |
四、机器语言、汇编语言和高级语言
- 机器语言
一般由数字字符串组成(0和1组成的数字字符串)。计算机能够直接明白它自己的机器语言,这是由其硬件结构决定的; - 汇编语言
使用机器语言来编写程序,这对程序员的要求太高了,只有少数人能做到。并且,使用这种语言进行编程效率低下,所以就出现了汇编语言,这是一种使用类似英语缩写的指令来表示基本操作的语言;同时,人们开发出了 汇编器的翻译程序,它们可以将汇编语言转换成机器指令;这种指令对于人而言要更易于理解,但是机器是无法理解的,所以必须经过转换; - 高级语言
汇编语言的出现只是在一定程度上方便了人们对程序的编写,所以为了更进一步的加快编程的速度,人们又开发出了高级语言,其中的单条语句就可以完成实质性的许多工作。高级语言使得程序员可以使用类似日常用语并包含常用数学符号形式的指令来编写程序,进一步的降低了编程的门槛。高级语言的翻译器叫做编译器(compiler),它能够将高级语言程序转换成机器指令;
将大型高级语言程序编译成机器指令是较为耗时的,所以人们又发明了解释器(interpreter),它可以直接执行高级语言程序,但是这样的执行过程比编译后的程序的运行要慢很多。脚本语言就是使用解释器来执行的;
提示:解释器在网络应用脚本编写方面优于编译器。待解释的程序一下载到客户的机器上就可以开始执行,不需要经过编译的延迟。
五、C++标准库
C++程序由一系列的被称为类和函数的构件组成,你可以自己编写构成一个c++程序的所有构件。但实际上,大多数程序员都会使用C++标准库(C++ Standard Library)所提供的丰富而现成的类和函数。所以,要想了解“C++世界”,需要学习两方面的内容:一是学习C++语言本身,二是学习使用C++标准库所提供的各种类和函数。
提示:使用“构建块”的方式来创建程序,可以避免重复工作。这就是软件重用,也是面向对象编程的核心思想
在C++编程过程中,通常会使用下面三种构建块:C++标准库中的类和函数,你和你同事编写的类和函数,第三方软件商提供的类和函数
使用自己编写的类和函数的优点在于你可以确切的知道它们是如何工作的,并且可以检查C++代码;但是缺点是保证新开发的类和函数的正确性及有效性是十分费时且代价高昂的;
六、面向对象技术
软件开发者在编写程序的过程中发现,相较于早期的开发方法,采用模块化的、面向对象的设计和实现方法,可以显著软件开发小组的生产效率——面向对象的程序更易于理解、纠正和修改。
在这里大家可能还是不太理解什么是面向对象,举个例子,汽车就是一个面向对象的产品;
一个从想要开车,实际上只需要知道,油门、刹车和离合器是什么、怎么使用即可,至于为什么踩油门车子就能加速,汽车内部是如何实现的,驾驶员并不需要知道。用户只需要知道产品如何使用、它能实现什么功能即可,产品的功能是如何实现的用户不需要了解。
成员函数和类
现在,我们从汽车的例子继续介绍一些关键的面向对象编程概念。执行程序中的任务需要调用成员函数。成员函数拥有实际执行这个任务的程序语句,在面向对象编程中,它向用户隐藏了这些语句,就如同汽车油门隐藏了实现汽车加速的复杂的内部结构。在C++中,我们会创建名为类的程序单元,类包含了执行该类需要完成任务的成员函数集合。例如一个表示学生信息的类可能包含了一个修改学生信息的成员函数、添加一个学生的成员函数,删除一个学生的成员函数等;这些成员函数中包含了实现任务的的具体代码,但是用户在使用时,只需要调用这个函数就能实现对应的功能,并不需要知道这个函数的内部是如何实现的;
实例化
类的成员函数就像汽车制造使用图纸,在使用汽车之前,需要根据图纸先造出一个汽车才行;同样的,在使用类提供的函数来实现目标功能之前,首先需要创建一个类的对象。这个构建对象的过程也叫实例化(instantiation)。于是一个类的对象也叫这个类的一个实例。
重用
一份汽车的图纸可以生产许多汽车,同样的我们也可以重用一个类来创建许多的对象。在构建一个新的类和程序时,可以重用已有的类,这可以节省时间和精力,并且重用还有助于构建一个更加可靠、有效的系统,因为被重用的类肯定是经过了大量的测试、使用及性能调试。
消息和成员函数调用
踩油门向汽车发送了要加速的消息,同样的,我们可以向一个类的对象发送消息。每一条消息都是一个成员函数的调用,该消息告诉对象的成员函数要去执行它的任务。
属性和数据成员
一个汽车除了可以执行对应任务之外,它还具有许多属性,比如,汽车的重量、油箱容量、里程数、当前油箱中的油量、车漆的颜色等等;和汽车应该实现的功能一样,这些属性在图纸阶段就已经设计好了。每个对象都会维护它自己的属性,比如,每辆车都知道自己当前的油量,但不知道其他车的测量;
与上面汽车类似,一个类的对象也有它的属性,这些属性都是这个对象的一部分;比如,一个学生对象,它有绩点属性,表示他在学校中的成绩,这个属性通常只有他自己知道;
封装
类将属性和成员函数封装(encapsulate)在对象中,一个对象的属性和成员函数都是密切相关的。对象之间可以相互通信(调用对方的成员函数),但是不允许知道其他对象是如何实现的(内部结构不可知)。
继承
我们可以通过继承来快速和方便的创建一个新的类,将原来的类的属性和成员函数吸收为自己的特性,同时可以添加新的特性。
面向对象分析与设计(OOAD)
一个良好的编程习惯应该是在编写代码之前,需要先经历确定项目的需求,并构想什么样的设计可以满足这些需求的分析过程。如果此过程是从面向对象的角度来考虑的,那么就称为面向对象分析和设计(OOAD)。
UML(统一建模语言)
统一建模语言(Unified Modeling Language, UML)是目前使用最广泛的、用于面向对象系统的建模图形语言。