C++ Primer Plus 知识的讲解

C++ Primer Plus知识全面讲解

程序模板

#pragma region xxx.cpp
//xxx.cpp -- xxx
#if 0
#include <iostream>
int main()
{
   
   
	using namespace std;

	return 0;
}
#endif
#pragma endregion

C++ Primer Plus 知识的讲解

第一章:预备知识

本章内容包括:
.C语言和C++的发展历史和基本原理
.过程性编程和面向对象编程
.c++是如何在C语言的基础上添加面向对象概念的
.c++是如何在C语言的基础上添加泛型编程概念的
.编程语言标准
.创建程序技巧

欢迎进入C++世界,这是一个令人兴奋的语言,他在C语言的基础上添加了面向对象编程和泛型编程的支持,在20时间90年代便是最重要的编程软件之一,并在21时间仍保持强劲势头。C++继承了C语言的高效,简洁,快速和可移植性的传统,C++面向对象的特性带来了全新的编程方法,这种方法是应付复杂程度不断提高的现代编程任务而设计的。C++的模板特性提供了另一种权限的编程方法----泛型编程,这三件发表即是福也是祸,一方面让C++语言功能强大,另一方面则意味着有更多的东西需要学习。
本章首先介绍C++的背景,然后介绍创建C++程序的一些基本原则,本书其他章节讲述如何使用C++ 语言,从最前线的基本知识开始,到面向对象编程(OOP)及其支持的新术语-----对象,类,封装,数据隐藏,多态和继承等,然后介绍他们对泛型编程的支持(当然,随着你对C++的学习,这些词汇将从花里胡哨的词语变为论述中必不可少的术语)

1.1 C++简介

C++融合了3种不同的编程方式:
1,C语言代表的过程性语言、
2,C++在C语言基础上添加的类代表的面向对象语言、
3,C++模板支持的泛型编程。
本章将简要介绍这些传统。不过首先,我们来看看这种传统对于学习 C++来说意味着什么。使用 C++的原因之一是为了利用其面向对象的特性。要利用这种特性,必须对标准 C语言知识有较深入的了解,因为它提供了基本类型、运算符、控制结构和语法规则。所以,如果已经对C有所了解,便可以学习C++了,但这并不仅仅是学习更多的关键字和结构,从C过渡到 C++的学习量就像从头学习C语言一样大。另外,如果先掌握了C语言,则在过渡到 C++时,必须摈弃一些编程习惯。如果不了解C语言,则学习 C++时需要掌握C语言的知识、OOP 知识以及泛型编程知识,但无需摈弃任何编程习惯。如果您认为学习C++可能需要扩展思维,这就对了。本书将以清晰的、帮助的方式,引导读者一步一个脚印地学习,因此扩展思维的过程是温和的,不至于让您的大脑接受不了。本书通过传授C语言基础知识和 C++新增的内容,带您步入C++的世界,因此不要求读者具备C语言知识。首先学习C++与C语言共有的一些特性。即使已经了解C语言,也会发现阅读本书的这一部分是一次很好的复习。另外,本章还介绍了一些对后面的学习十分重要的概念,指出了C++和C之间的区别。在牢固地掌握了C语言的基础知识后,就可以在此基础上学习C++方面的知识了。那时将学习对象和类以及C++是如何实现它们的,另外还将学习模板。
本书不是完整的 C++参考手册,不会探索该语言的每个细节,但将介绍所有的重要特性,包括模板异常和名称空间等。
下面简要地介绍一下C++的背景知识。

  1. 1.2 C++简史

在过去的几十年,计算机技术以令人惊讶的速度发展着,当前,笔记本电脑的计算速度和存储信息的能力超过了 20世纪60年代的大型机。很多程序员可能还记得,将数叠穿孔卡片提交给充斥整个房间的大型计算机系统的时代,而这种系统只有100KB的内存,比当今智能手机的内存都少得多。计算机语言也得到了发展,尽管变化可能不是天翻地覆的,但也是非常重要的。体积更大、功能更强的计算机引出了更大.
更复杂的程序,而这些程序在程序管理和维护方面带来了新的问题。在 20 世纪 70年代,C和 Pascal 这样的语言引领人们进入了结构化编程时代,这种机制把秩序和规程带进了迫切需要这种性质的领域中。除了提供结构化编程工具外,C还能生成简洁、快速运行的程序,并提供了处理硬件问题的能力,如管理通信端口和磁盘驱动器。这些因素使C语言成为 20世纪 80年代占统治地位的编程语言。同时,20世纪 80年代,人们也见证了一种新编程模式的成长:面向对象编程(OOP)。SmallTalk和C++语言具备这种功能。下面更深入地介绍C和OOP。

1.2.1 C语言

20世纪 70年代早期,贝尔实验室的 DennisRitchie致力于开发 UNIX操作系统(操作系统是能够管理计算机资源、处理计算机与用户之间交互的一组程序。例如,操作系统将系统提示符显示在屏幕上以提供终端式界面、提供管理窗口和鼠标的图形界面以及运行程序)。为完成这项工作,Ritchie 需要一种语言
它必须简洁,能够生成简洁、快速的程序,并能有效地控制硬件。传统上,程序员使用汇编语言来满足这些需求,汇编语言依赖于计算机的内部机器语言。然而,汇编语言是低级(low-level)语言,即直接操作硬件,如直接访问CPU寄存器和内存单元。因此汇编语言针对于特定的计算机处理器,要将汇编程序移植到另一种计算机上,必须使用不同的汇编语言重新编写程序。这有点像每次购买新车时,都发现设计人员改变了控制系统的位置和功能,客户不得不
重新学习驾驶。然而,UNIX是为在不同的计算机(或平台)上工作而设计的,这意味着它是一种高级语言。高级(high-level)语言致力于解决问题,而不针对特定的硬件。一种被称为编译器的特殊程序将高级语言翻译成特定计算机的内部语言。这样,就可以通过对每个平台使用不同的编译器来在不同的平台上使用同一个高级语言程序了。Ritchie希望有一种语言能将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他在旧语言的基础上开发了C语言。

  1. 1.2.2C语言编译原理

由于C++在℃语言的基础上移植了新的编程理念,因此我们首先来看一看C所遵循的旧的理念。一般来说,计算机语言要处理两个概念–数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法(参见图1.1)。C语言与当前最主流的语言一样,在最初面世时也是过程性(procedural)语言,这意味着它强调的是编程的算法方面。从概念上说,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这些操作。程序命令计算机按一系列流程生成特定的结果,就像菜谱指定了厨师做蛋糕时应遵循的一系列步骤一样。
随着程序规模的扩大,早期的程序语言(如FORTRAN和BASIC)都会遇到组织方面的问题。例如,程序经常使用分支语句,根据某种测试的结果,执行一组或另一组指令。很多旧式程序的执行路径很混乱(被称为“意大利面条式编程”),几乎不可能通过阅读程序来理解它,修改这种程序简直是一场灾难。为了解决这种问题,计算机科学家开发了一种更有序的编程方法–结构化编程(structuredprogramming)。C语言具有使用这种方法的特性。例如,结构化编程将分支(决定接下来应执行哪个指令)限制为一小组行为良好的结构。C语言的词汇表中就包含了这些结构(for循环、while循环、do while 循环和ifelse 语句)。另一个新原则是自顶向下(top-down)的设计。在C语言中,其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的、易于编写的模块(整理一下书房。先整理桌子、桌面、档案柜,然后整理书架。好,先从桌子开始,然后整理每个抽屉,从中间的那个抽屉开始整理也许我都可以管理这项任务)。C语言的设计有助于使用这种方法,它鼓励程序员开发程序单元(函数)来表示各个任务模块。如上所述,结构化编程技术反映了过程性编程的思想,根据执行的操作来构思一个程序。

  1. 1.2.3 面向对象编程

1.2.3 面向对象编程
虽然结构化编程的理念提高了程序的清晰度、可靠性,并使之便于维护,但它在编写大型程序时,仍面临着挑战。为应付这种挑战,OOP提供了一种新方法。与强调算法的过程性编程不同的是,OOP强调的是数据。OOP不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要
求。其理念是设计与问题的本质特性相对应的数据格式。在 C++中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构。例如,类可以描述公司管理人员的基本特征(姓名、头衔、工资、特长等),而对象则代表特定的管理人员(Guilford Sheepblat、副总裁、S925 000、知道如何恢复 Windows注册表)。通常,类规定了可使用哪些数据来表示对象以及可以对这些数据执行哪些操作。例如,假设正在开发一个能够绘制矩形的计算机绘图程序,则可以定义一个描述矩形的类。定义的数据部分应包括顶点的位置、长和宽、4条边的颜色和样式、矩形内部的填充颜色和图案等;定义的操作部分可以包括移动、改变大小、旋转、改变颜色和图案、将矩形复制到另一个位置上等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值