C++初学者指南 第一篇 (1)

本文介绍了C++编程语言的历史背景和发展过程,强调了C++作为现代编程基石的重要性,并概述了其如何从C语言演变而来,以及引入面向对象编程的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一篇 C++基础

    如果说有一种语言定义了当今编程的实质,那么它就是C++。它是高性能软件开发的杰出语言。它的语法已经成为专业编程语言的标准,并且它的设计思想在计算界引起深刻的反响。
    Java和C#语言都是从C++继承而来的。简而言之,要成为专业的编程人员就意味着要深刻理解C++。它是现代编程的基础。
本篇旨在介绍C++,包括它的历史,它的设计思想,以及几个最重要的特性。学习一门编程语言最困难的事情就是所有的元素都不是单独孤立存在的。相反,构成语言的各个部分是相互协作,一起工作的。这种相关性使得我们很难讨论C++的一个方面而不去考虑其它方面。为了克服这个困难,本篇对几个C++特性进行了简单的介绍,包括C++程序的通用形式,一些基本的控制语句,以及运算符。本篇不会涉及过多的细节,更注重C++程序中通用的概念。

 

必备技能 1.1 C++历史简介

     C++是从C语言发展而来的。这一点不难理解,因为C++是构筑的C语言的基础之上的。然而,C++是C语言的超集。C++扩展并增强了C语言,支持面向对象的编程(这点在本篇的后面会进行描述)。C++同时对C语言做了改进,包括扩展了例行程序库集。然而大部分的C++特性是直接从C继承而来的。因此,为了充分理解和欣赏C++,我们必须深入了解C语言是如何运作的。
 
C: 现代编程时代的开始

     C语言的发明定义了现代编程时代的开始。它的影响不应该被低估,因为它从根本上改变了人们考虑和实现程序的方法。它的设计思想和语法已经影响到了每一个主流的编程语言。C语言是计算发展的主要的,革命性的推动力之一。

C语言由Dennis Ritchie 在 DEC PDP-11电脑上,在UNIX操作系统下发明并实现的。C语言是从一种古老的叫做BCPL的语言发展而来。BCPL 是由Martin Richards开发的。BCPL 语言对由 Ken Thompson 发明的B语言产生着深刻的影响,而B语言最终在20世纪70年代发展成C语言。 

     在C语言发明之前,计算机语言被设计出来或者是为了进行学术计算,或者是为官方的委员们所使用。而C却不同。它是一群真实的程序员设计、实现并开发出来的。它反映了这些人完成编程工作的方法。它的特性是这群实际使用这个语言的人们反复推敲,打磨,测试的结果。因此,C语言吸引了众多的拥护者,并迅速成为全世界编程人员的选择。

    C语言的发展经历了20世纪60年代的结构化编程的革命。在此之前,大型程序是难以书写的,因为程序的逻辑趋向于退化成“意大利面条式的代码”,充斥着难以理解的,混乱的转跳,函数调用和返回。结构化编程通过增加很好的控制语句,带有局部变量的子程序段和其它的一些改进解决了这个问题。结构化编程使得编写巨大的程序成为了可能。尽管还有别的结构化的编程语言,例如Pascal,C却是第一个功能强大,富于表达,能书写出优美代码的结构化语言。它语法简单易用,并且它的设计思想是程序员掌控一切,而不是语言本身掌控一切,这就使得C语言很快拥有了众多的拥护者。我们现在来看这点可能有点难以理解,但是C当时确实为编程者带来了他们渴望已久的新鲜空气。因此,C语言很快就在20世纪80年代变成了使用最广泛的结构化编程语言。

 

我们需要C++

     经过前文的描述,你可能会问,那为什么还要发明C++呢?既然C是很优秀的编程语言,我们为什么还需要别的编程语言呢?这个问题的答案非常复杂。纵观编程技术的发展历史,程序复杂度的增加驱使我们需要更好的方式来管理我们的程序。C++就应运而生了。为了更好地理解增长的程序复杂度与计算机编程语言发展之间的关系,我们需要简单回顾一下计算机编程技术发展的历史。当计算机刚被发明出来的时候,人们使用计算机前面的面板,通过拨动开关来发送二进制的机器指令。这种方式在计算机程序只有几百行的时候还可以工作。随着计算机程序的增大,人们发明了汇编语言,通过使用符号代替机器指令,以便程序员可以处理更大的,更复杂的程序。第一个被广泛使用的计算机语言是FORTRAN。FORTRAN语言在起初给人的印象是非常深刻的,当时几乎没有语言能实现编写整洁,易于理解的程序。20世纪60年代,结构化编程诞生了,这正是诸如C语言一样的语言所鼓励的编程方法。通过结构化的编程方法,很轻松的编写大型程序第一次成为了可能。然而,即使是使用结构化的编程方法,一旦一个项目到达了一定的规模,其复杂度也就超过了程序员所能管理的范围。在20世纪70年代,很多项目几乎都处于这种境地。为了解决这种问题,出现了一种新的编程方法:面向对象编程。通过使用面向对象编程,程序员可以处理更大的,更复杂的程序。而C语言是不支持这种面向对象编程方法的。于是,人们对面向对象的C的渴望就直接导致了C++的诞生。可见,自从计算机发明以来,编程的方式已经发生了巨大的变化。

     最后一点,尽管C是世界上最受欢迎的专业编程语言之一,也有复杂的程序是C不能完成的。一旦一个程序的规模达到了一定的大小,其复杂度就会增加,以至于很难从整体上对其进行把握。C++的目的就是突破这种障碍,帮助编程人员理解并管理更大,更复杂的程序。
 
C++的诞生

     C++由 Bjarne Stroustrup 于1979年在位于新泽西州Murray Hill 的贝尔实验室成功发明。起初它的名字叫“带有类的C”,后来在1983年更名为C++。Stroustrup在C的基础上构建了C++,因此C++包括C的所有特性和优点。它还继承了C的理念:程序员而不是程序掌控一切。有一点必须明确,Stroustrup并没有创建一个全新的编程语言。相反,它增强了已经高度成功的语言。大多数Stroustrup为C增加的特性都是为了支持面向对象的编程。从本质上来讲,C++就是支持面向对象的C。通过在C的基础上构建C++,就实现了到面向对象编程的平滑过渡。C程序员不必重新学习一门新的语言,只需要学习那些新增的特性,就能收获面向对象编程带来的好处。在设计C++语言的时候,Stroustrup 清楚地知道在增加支持面向对象编程的特性时,保持原有C的特性,包括C的高效,灵活和C的设计理念是非常重要的。幸运的是,他的目标实现了。C++在提供了面向对象的编程优点同时,还保留了C的灵活。尽管发明C++的初衷是为了辅助管理那些大型的程序,但它绝不仅限于此。实际上,C++的面向对象特性可以被有效地引用到实际上任何程序中。C++可以广泛地被用来开发诸如编辑器,数据库,个人文件系统,网络工具,通信程序等,这些都非常常见。由于C++保留了C的高效性,大量的高性能系统软件都是用C++开发的。同样,C++也经常被用来开发windows程序。

 

C++的发展

     C++被发明后,经过了三次大的修订,每次修订都对语言自身做了增加和改动。第一次和第二修订分别是在1985年和1990年。第三次修订发生在C++标准化的过程中。几年前(现在来看,应该是十几年前了),人们开始进行C++的标准化工作。那时,建立了由美国国家标准研究所(ANSI)和国际标准组织(ISO)合作的标准化组织组。建议标准的第一次草案是在1994年1月25日完成的。在这份草案中,ANSI/ISO联合委员会保留了Stroustrup 当初定义的特性,并增加了一些新的特性。总的来说,这份最初的草案反映了当时C++的情况。在此之后不久,发生了一件事情,促使了联合委员会大大地扩展了该标准:由Alexander Stepanov提出的标准模板库的创建。标准模板库是一套我们可以用之处理数据的通用程序的集合。通用模板库很强大,也很简洁优雅。但是它很巨大。在第一次草案之后,委员会曾经投票来决议是否在标准C++中增加标准模板库。标准模板库的增加使得C++大大超出了起初定义的范围。对标准模板库和其它一些特性的增加使得C++标准化的步伐减慢了许多。完全可以说C++的标准化工作比人们期望的时间要长许多。在整个过程中,C++中加入了许多新的特性,并做了许多小的改动。实际上,由该联合委员会制定的C++比Stroustrup当初设计的C++要复杂很多。最终的草案在1997年12月14日通过,ANSI/ISO标准C++在1998年成为现实。这就是人们通常说的标准C++。本书描述的都是标准的C++。本书描述的C++是所有主流C++编译器,包括微软的visual C++都支持的C++。因此本书中的代码和信息是完全可移植的。

1 章:C++ 基础知识 此模块将向您介绍 C++,包括其历史、设计理念以及几个最重要的功能。此模块简要概述几个 C++ 功能,包括 C++ 程序的一般形式、一些基本控制语句和运算符。它不会介绍太多细节,而会重点介绍对所有 C++ 程序都通用的一般概念。 第 2 章:数据类型和运算符简介 编程语言的核心在于其数据类型和运算符。不出您所料,C++ 支持大量数据类型和运算符,使其适合的编程范围非常广泛。此模块对 C++ 基本数据类型及其最常用运算符进行探讨。我们还将进一步了解变量,并研究表达式。 第 3 章:程序控制语句 此模块讨论用于控制程序执行流的语句。有三种类别的程序控制语句:选择语句,包括 if 和 switch 语句;迭代语句,包括 for、while 和 do-while 循环;以及跳转语句,包括 break、continue、return 和 goto 语句。 第 4 章:数组、字符串和指针 此模块讨论数组、字符串和指针。数组是变量的集合,这些变量具有相同的类型,由一个公用名引用。数组为创建相关变量的列表提供了一种便利方法。C++ 语言不定义内置字符串数据类型。相反,字符串作为字符数组实现。指针是包含内存地址的对象。通常,指针用于访问另一个对象的值。 第 5 章:函数简介 此模块开始深度探讨函数。函数是 C++ 的构建基块,深入理解函数是成为成功 C++ 编程人员的基础。下面,您将了解如何创建函数。您还将了解传递参数、返回值、局部变量和全局变量、函数原型和递归。 第 6 章:进一步了解函数 此模块继续探讨函数。它讨论了 C++ 的三个最重要的函数相关主题:引用、函数重载和默认参数。 第 7 章:更多数据类型和运算符 此模块返回到数据类型和运算符的主题。除了您到目前为止已在使用的数据类型,C++ 还支持其他几种数据类型。其中一些数据类型由已知类型加上修饰符组成。其他数据类型包括 enumeration 和 typedef。C++ 还提供多个附加运算符,极大地扩展了 C++ 可以应用到的编程任务范围。 第 8 章:类和对象 类是 C++ 的基本封装单位。类用于创建对象。若要编写面向对象的程序,需要使用类。类和对象对于 C++ 非常重要,因此本书其余内容大部分都或多或少与它们相关。 第 9 章:进一步了解类 此模块继续探讨模块 8 中谈到的类。它涉及很多与类相关的主题,包括重载构造函数、传递对象到函数以及返回对象。它还介绍一种特殊类型的构造函数(称为复制构造函数),这种函数在需要对象副本时使用。接下来介绍友元函数,然后是结构和联合,以及 this 关键字。此模块最后介绍运算符重载,这是 C++ 中最吸引人的功能之一。 第 10 章:继承、虚函数和多态性 此模块讨论 C++ 中与面向对象编程直接相关的三个功能:继承、虚函数和多态性。继承是允许一个类继承另一个类特性的功能。虚函数是在继承的基础上构建的。虚函数支持多态性(面向对象编程的“一个接口,多种方法”原理)。 第 11 章:C++ I/O 系统 C++ I/O 系统非常大,无法在此讨论每个类、函数或功能,不过此模块将介绍最重要和最常用的部分。具体而言,它说明如何输入或输出所设计类的对象。它还介绍如何设置输出格式以及如何使用 I/O 操纵器。此模块最后讨论文件 I/O。 第 12 章:异常、模板和其他高级主题 最后一个模块将介绍几个重要的、高级 C++ 主题,包括异常处理、模板、动态分配和命名空间。另外还介绍运行时类型 ID 和转换运算符。完成此模块后,您将掌握这种语言的核心元素,能够开始编写实际程序。 掌握检查的答案 附录 A:预处理器 预处理器是编译器的一部分,在将源代码实际转换为对象代码之前,预处理器对程序执行各种文本操作。可以为预处理器提供文本操作命令。这些命令称为预处理器指令,它们实际上不是 C++ 的组成部分,但扩展了 C++ 编程环境的范围。
这是DS小龙哥编写整理的C++入门指南PDF文档,适合C++初学者,C语言C++工程师当做入门工具书学习。PDF里有完整示例、知识讲解,平时开发都可以复制粘贴,非常便捷。 目前一共写了7章,后续会持续更新资源包,更新后重新下载即可。 这是目前书籍的目录: C++入门指南 1 一、 C++语言基本介绍与开发环境搭建 1 1.1 C++简介 1 1.2 面向对象编程 1 1.3 Windows系统下搭建C++学习环境 2 二、C++基础入门 16 2.1 C++类和对象 17 2.2 C++命名空间 18 2.3 std标准命名空间 20 2.4 C++新增的标准输入输出方法(cin和cout) 22 2.5 C++规定的变量定义位置 24 2.6 C++新增的布尔类型(bool) 24 2.7 C++ 新增的new和delete运算符 25 2.8 C++函数的默认参数(缺省参数) 26 2.9 C++函数重载详解 28 2.10 C++新增的引用语法 30 三、 C++面向对象:类和对象 34 3.1 类的定义和对象的创建 34 3.2 类的成员变量和成员函数 36 3.3 类成员的访问权限以及类的封装 38 3.4 C++类的构造函数与析构函数 39 3.5 对象数组 47 3.6 this指针 50 3.7 static静态成员变量 52 3.8 static静态成员函数 53 3.9 const成员变量和成员函数 55 3.10 const对象(常对象) 56 3.11 友元函数和友元类 58 3.11.3 友元类 61 3.12 C++字符串 62 四、C++面向对象:继承与派生 75 4.1 继承与派生概念介绍 75 4.2 继承的语法介绍 75 4.3 继承方式介绍(继承的权限) 76 4.4 继承时变量与函数名字遮蔽问题 79 4.5 基类和派生类的构造函数 82 4.6 基类和派生类的析构函数 83 4.7 多继承 85 4.8 虚继承和虚基类 88 五、C++多态与抽象类 91 5.1 多态概念介绍 91 5.2 虚函数 92 5.3 纯虚函数和抽象类 95 六、C++运算符重载 97 6.1 运算符重载语法介绍 97 6.2 可重载运算符与不可重载运算符 98 6.3 一元运算符重载 99 6.4 二元运算符重载 102 6.5 关系运算符重载 104 6.6 输入/输出运算符重载(>>、<<) 105 6.7 函数调用运算符 () 重载 106 6.8 重载[ ](下标运算符) 107 七、C++模板和泛型程序设计 108 7.1 函数模板 108 7.2 类模板 110
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值