第1单元 C++简介

文章目录

  • 第1单元 C++简介
    • 单元导学
    • 1.1 C++编程范式与现代C++标准
      • 1.1.1 C++地位概览
      • 1.1.2 C++编程范式
      • 1.1.3 程序设计语言演化
    • 1.2 学习C++:参考书和编译环境
      • 1.2.1 参考书
      • 1.2.2 程序开发中的术语
      • 1.2.3 创建和编译程序的过程

注:本部分内容主要来自中国大学MOOC北京邮电大学崔毅东的C++程序设计(面向对象进阶)课程。

注:94条C++程序规范。


单元导学

本单元介绍这门课程的背景知识以及相关工具。
1. 关于C++
  C++编程语言是一门古老的语言。它在演进中,背负了兼容C语言的重任。这也导致C++看起来什么都能干,像是一个大杂烩。C++在软件设计开发中属于拳脚兵器的地位。它是实现软件的基本手段。学习C++之后,我们还要学习数据结构、设计模式等。之后要学习面向对象分析与设计。最后学习软件工程体系,称为一个合格的软件设计开发者。
  相比于Java、Python等语言,C/C++语言的控制粒度很细,掌握起来更难。就好比造一个玩具房子,C/C++语言可能是沙子,虽然搭造过程很麻烦,但可以精细到每一粒沙子都可以调整位置;但是Java等语言就好像积木,虽然可以很快的完成任务,但是却无法改变积木以下的形状。具体可以参考视频培训机构为什么很少培训C++,特别爱Java、为什么全网都在劝你学Java、Python,而不是C++?。

2. 经典C++和现代C++
  C++11标准之前的C++被称为“Classic C++”,即经典C++。字C++11标准之后的C++被称为“Modern C++”即现代C++。这个称呼的改变意味着C++从内到外有一个非常大的变化。这也是你学习本课程要达到的目的之一。

3. C++的编程范式
  所谓编程范式,通俗来讲,就是规范编程的一系列思想、方法以及程序设计语言构造块所构成的一种模式。C++支持多种编程范式:过程性、面向对象、泛型、函数式等。

维基百科定义:
编程范型、编程范式或程序设计法(英语:Programming paradigm),(范即模范、典范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照方法学)。如:函数式编程、程序编程、面向对象编程、指令式编程等等为不同的编程范型。

  编程范型提供了(同时决定了)程序员对程序执行的看法。例如,在面向对象编程中,程序员认为程序是一系列相互作用的对象,而在函数式编程中一个程序会被看作是一个无状态的函数计算的序列。

  正如软件工程中不同的群体会提倡不同的“方法学”一样,不同的编程语言也会提倡不同的“编程范型”。一些语言是专门为某个特定的范型设计的(如Smalltalk和Java支持面向对象编程,而Haskell和Scheme则支持函数式编程),同时还有另一些语言支持多种范型(如Ruby、Common Lisp、Python和Oz)。

4. 编程工具的选择
  简而言之,对于学习本课程的同学来说,大部分是处于编程的初学阶段。选择编程工具,第一个因素是工具是否是最新的。因为随着编程语言的发展,编程工具,尤其是集成开发环境也在不断进步。新的工具会提供更加友好的界面,更加易读的提示信息、编译信息。

5. 安装配置一种集成开发环境
本课程中,主要介绍了两种集成开发环境:

1)微软的 Visual Studio
2)开源的 Eclipse CDT + GCC

1.1 C++编程范式与现代C++标准

1.1.1 C++地位概览

  上图是C++在CS中的地位,以及C++和其他语言的整体类比。

  C++ 是一门复杂的语言。这体现在C++继承了C语言的主要特征,借鉴了Smalltalk一些面向对象的特性,除此之外还演化出一些新的概念,如模板。

1.1.2 C++编程范式

  • Structural Programming(结构化编程)
    所有的函数都可以访问数据,任何数据也可以被任何函数访问。
    缺点:当一个程序访问数据时,数据可能已经被其他函数修改。
  • Object-Oriented Programming(OOP,面向对象编程)
    每个程序和其数据都被封装在一起,数据交互通过接口实现。
    评价:OOP使得开发和维护程序变得更加容易。
  • Generic Programming(GP,泛型编程)
    泛型编程解决数据类型更换就需要重新写数据的问题,使得程序本身更加通用。
  • Functional Programming(FP,函数式编程)
    简单来说就是将程序封装起来,不会对外界有副作用。

1.1.3 程序设计语言演化

上图给出了高级程序语言的演化过程。

年份 C++标准 官方名称
2020 To be determined C++20
2017 ISO/IEC 14882:2017 C++17,C++1z
2014 ISO/IEC 14882:2014 C++14,C++1y
2011 ISO/IEC 14882:2011 C++11,C++98
2003 ISO/IEC 14882:2003 C++03
1998 ISO/IEC 14882:1998 C++98

1.2 学习C++:参考书和编译环境

1.2.1 参考书

1. Textbook
英文版: 《Introduction to Programming with C++》(3rd Ed.), Y. Daniel Liang,机械工业出版社,2013年6月1日出版。
中文版:《C++程序设计》(第3版),梁勇,机械工业出版社, 2015年1月1日出版。
理念:fundamentals-first,适于无任何基础的初学者

2. Reference books
另一种风格的入门书:《C++ Primer》作者Stanley B. Lippman等。
理念:Object-Early。属于C++大全,深度适当,适合自学,太厚(848), 很多读者半道出家去学java。第五版按C++11标准更新了内容,示例均采用 C++11 标准改写。

3. Other Books (新手入门后)
3.1. 《Thinking in C++》 (中译:C++编程思想)2nd edition, Volume 1, Bruce Eckel
免费电子版(英文): https://mindview.net/Books/TICPP/ThinkingInCPP2e.html

3.2. 《Essential C++》 (有中译本)作者:Stanley B. Lippman
推荐理由:适于有编程基础的人。

3.3. 《The C++ Programming language》 (有中译本)作者:Bjarne Stroustrup
一本每个人都应该买但不一定要看的书。可以当字典用,不适用于初学者。

4. Other Books (学完本课程后)
4.1. 《The C++ Standard Library : A Tutorial and Reference》 (2nd Edition) 作者:Nicolai M. Josuttis;译者:侯捷。
推荐理由:工欲善其事,必先利其器:利用标准库,提高实作能力。

4.2. 《Inside C++ Object Model》 作者:Lippman;译者:侯捷。
推荐理由:从编译器的角度来探讨C++的实现方法和优缺点。

最后,也可以参考一下B站代码羊自学C/C++的书籍推荐。

1.2.2 程序开发中的术语

  • 编辑器(Editor)
      程序开发中的“编辑器”一般是指 “代码编辑器”。一般而言,计算机程序是用文本形式体现的。少量专门用途的“编程语言”可能是图形界面编写程序的,比如用于幼儿编程教育的Alice等。
      代码编辑器主要用于用来编写和查看程序源代码。通常这种编辑器有语法加亮(Syntax-Highlighting)功能。

  • 编译器(Compiler)
    【中文维基百科】:编译器(compiler),是一种计算机程序,它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。
    【英文维基百科】:A compiler is a computer program that transforms computer code written in one programming language (the source language) into another programming language (the target language). Compilers are a type of translator that support digital devices, primarily computers. The name compiler is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program.

  • 链接器(Linker)
    【中文维基百科】:是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件.
    Linker 有时翻译为链接器,有时翻译为连接器。但是后者比较少见。

  • 调试器(Debugger)
    【中文维基百科】:调试器是指一种用于调试其它程序的计算机程序及工具。能够让代码在指令组模拟器(ISS)中可以检查运行状况以及选择性地运行,以便排错、调试。当开发的进度遇到瓶颈或找不出哪里有问题时,这技术将是非常有用的。但是将程序运行在调试器之下,这将比直接在运作的平台以及处理器上运行还要来得慢。
      典型的调试器通常能够在程序运行时拥有以下这些功能,例如单步运行(single-stepping)、利用中断点(breakpoint)使程序遇到各种种类的事件(event)时停止(breaking)(一般用于使程序停止在想要检查的状态)、以及追踪某些变量的变化。有些调试器也有能力在想要调试的程序在运行状态时,去改变它的状态,而不仅仅只是用来观察而己。

  • 解释器(interpreter)
    【中文维基百科】:解释器是一种计算机程序,能够把高级编程语言一行一行解释运行。解释器像是一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它不会一次把整个程序翻译出来,而是每翻译一行程序就立刻运行,然后再翻译下一行,再运行,如此不停地进行下去。

  • 集成开发环境(Integrated Development Environment,简称IDE)
    【中文维基百科】:集成开发环境是一种辅助程序开发人员开发软件的应用软件,在开发工具内部就可以辅助编写源代码文本、并编译打包成为可用的程序,有些甚至可以设计图形接口。
      IDE通常包括编程语言编辑器、自动构建工具、通常还包括调试器。有些IDE包含编译器/解释器,如微软的Microsoft Visual Studio,有些则不包含,如Eclipse、SharpDevelop等,这些IDE是通过调用第三方编译器来实现代码的编译工作的。有时IDE还会包含版本控制系统和一些可以设计图形用户界面的工具。许多支持面向对象的现代化IDE还包括了类别浏览器、对象查看器、对象结构图。虽然当前有一些IDE支持多种编程语言(例如Eclipse、NetBeans、Microsoft Visual Studio),但是一般而言,IDE主要还是针对特定的编程语言而量身打造(例如Visual Basic)。

  • 图形用户界面
    图形用户界面(Graphical User Interface,简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要透过在显示器的特定位置,以“各种美观、而不单调的视觉消息”提示用户“状态的改变”,势必得比简单的文字消息呈现,花上更多的计算机运算能力,计算“要改变显示器哪些光点,变成哪些颜色”。

  • 可视化程序设计语言
    【英文维基百科】:In computing, a visual programming language (VPL) is any programming language that lets users create programs by manipulating program elements graphically rather than by specifying them textually. (在计算领域,可视化程序设计语言是任何能让用户以图形化的方式操纵程序元素,而不是仅仅使用编写文本的方式,来生成程序的语言)。
      常见的可视化程序设计语言,通常都是与集成开发环境打包的。比如 C++ 本身不是可视化程序设计语言,但是 Visual C++ 中提供了为 Windows 窗口应用程序创建界面的功能,所以以一种不严格的说法,Visual C++ 是可视化程序设计语言。

  • 图形用户界面设计工具
      我们很难听到“图形用户界面设计工具”这样的说法。一种可能的理解是,集成开发环境为可视化程序设计语言提供的用于设计图形用户界面的功能或者工具。另一种可能的理解是指“原型设计工具”,比如Axure等。

1.2.3 创建和编译程序的过程

  • Precompile:这里的替换工作如将一开始的“#include”中的头文件代码替换到源文件里面去。
  • Compile:生成目标文件,这个文件在不同的操作系统或编译器上有不同的规则。
  • Link:对程序中的各种符号进行重新定位。

C++学习笔记-第1单元-C++简介相关推荐

  1. C++学习笔记-第7单元-文件输入输出流

    C++学习笔记-第7单元 文章目录 C++学习笔记-第7单元 第7单元 文件输入输出流 单元导读 7.1 [C++17]文件系统 7.1.1 C++17的文件系统库简介 7.1.2 路径类及操作 7. ...

  2. C++学习笔记-第4单元-对象和类(基础)

    C++学习笔记 文章目录 C++学习笔记 第4单元 对象和类(基础) 单元导读 4.1 用类创建对象 4.1.1 对象和类 4.1.2 创建对象并访问 4.2 对象拷贝.分离声明与实现 4.2.1 对 ...

  3. ALSA学习笔记 (1) ALSA 简介

    ALSA学习笔记 (1) ALSA 简介 1. ALSA接口 1.1 对用户空间的接口 1.1.1 设备节点: 1.1.2 proc文件系统 1.1.3 debug 文件系统节点 1.2 对驱动的接口 ...

  4. 分布式学习笔记---分布式系统的回顾与简介

    分布式学习笔记-分布式系统的回顾与简介 1. 分布式系统概念 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统. 通俗的理解,所谓分布式系统,就是一 ...

  5. VBA学习笔记8:单元格的合并与拆分

    VBA学习笔记8:单元格的合并与拆分 如下图,需要实现1图到2图(单元格合并),或2图到1图(单元格拆分). 1图: 2图: 合并单元格代码如下: Sub 合并单元格()Dim k%, rng As ...

  6. Excel VBA 学习笔记13:单元格的格式

    Excel VBA 学习笔记13:单元格的格式 NumberFormat 属性 (Excel) vba excel 单元格格式设置 Excel VBA 单元格格式 python解决SNIMissing ...

  7. Docker学习笔记——(一)docker简介与docker安装

    Docker简介与安装 1. Docker简介 docker是什么? docker架构原理 docker有什么用? docker容器与虚拟机的区别 虚拟机与Docker的体系结构说明: 整体对比: 2 ...

  8. 5地图组件 uni_uni-app学习笔记(一)-- uni-app简介

    uni-app入门 uni, 从这个单词的意思,就能看的出来,Dcoud社区的野心 这个试图统治整个前端界的技术,到底有没有那么好呢? 科普 Dcloud是干嘛的? 著名的国产开源开发工具,Hbuil ...

  9. 【web编程技术学习笔记】因特网与万维网简介

    目录 Client客户端 Server服务器端 TCP/IP五层协议 IP 查看IP地址的的两种方法 TCP URL 样式一 样式二 DNS URL&DNS HTTP 与因特网有关的组织 IE ...

最新文章

  1. 【C++】多线程与异步编程【四】
  2. @override怎么加上去_不知道怎么学?java后端5年经验和技术总结(附思维导图)
  3. python无法启动此程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...
  4. 成功输出消息后的采购订单不能取消审核
  5. AI表情迁移、电影字幕自动翻译等,原来是这么玩的!
  6. 论文解读丨Zero-Shot场景下的信息结构化提取
  7. pandas最常用的几个功能,随时翻阅就差不多弄懂了pandas的75%左右
  8. 20172313 2018-2019-1 《程序设计与数据结构》第六周学习总结
  9. MINIGUI图形界面开发入门,交叉编译,移植
  10. Ubuntu 16.04 x64 常用软件
  11. errors collectiions
  12. mysql oracle replay_Oracle 数据库重放(Database Replay)功能演示
  13. 「开源资讯」Apache Storm 2.2.0 发布,分布式实时计算
  14. Java、JSP小额支付管理平台
  15. MATLAB泰勒展开
  16. linux系统下查找应用,Linux系统find查找命令运用
  17. 智齿调用a标签时触发绑定事件
  18. nexus+4+android+6,Android 4.1.1+Nexus S安装BT5
  19. 读书笔记:结构思考力的基本特点和操作步骤
  20. 教程丨手把手教你做数据挖掘 !(附教程数据源)

热门文章

  1. html在线过滤器,过滤器-内置过滤器.html
  2. Hbase系列---内置过滤器
  3. OpenLayers 3自定义地图工具条(一)
  4. linux下netflow软件,NetFlow Analyzer下载
  5. 游戏计算机中丢失,玩游戏时出现因为计算机中丢失xinput1_3.dll的解决方法
  6. 《JAVA 程序设计实验指导与习题测试》pdf 附下载链接
  7. 从《学书津梁》看五体创作思路(行书)
  8. java求导数_JAVA实现表达式求导运算的分析总结
  9. 陕西省三本计算机专业排名,陕西三本大学排名完整版
  10. 什么是智慧消防?数字孪生技术打造的“智慧消防”系统管控云平台了解一下