【基础学习】【C++】chapter 1: Getting started with C++

从决定从传统工科专业跨专业考研转行至CS或SE专业,到现在已经有一年时间了。这一年时间里,我的主要精力放在考研科目的准备上(专业课408),再加上本科阶段接触的相关专业几乎没有,只是简单学过C++和FORTRAN,自学过Matlab用于平日课程作业的计算,所以纵然经历了这么长时间,我的相关领域知识和实操几乎为0。
因此从今天这第一篇Blog起,我会详细记录我从0开始的成长记录,既是为了时时回顾自己的学习过程,也是为了有一份自己的学习笔记方便查找。

那就从C++开始吧!

前期准备

  • 一点C语言基础,没有也无妨
  • 教材我用的是C++ Primer Plus 6th edtion,这是一本非常详尽的C++入门书,用的英文版主要是为了接触专业英语的考虑,如果觉得费力的话可以用中文版,用鸠摩搜书可以搜到旧一两版的中文版电子PDF。搭配PDF-Xchange-Viewer等PDF阅读器和有道等电子词典(打开划词翻译)食用更佳。Blog也基本按照这本书的行文思路和顺序。
  • dev C++等适合初学者的轻量级C/C++集成开发环境,在前期知识储备不够的情况下,尽量减轻语言外的学习成本。

引子(C/C++)

(不重要,后面会具体学习)

Cの特色

C++ = C + object-oriented + generic programming ,可以这样一个公式简单理解。C++将新的编程思想带入C,因此简要了解C的特色是必要的。

C语言帮助开启了以模块功能设计等为基本原则的结构化程序设计(structured programming)时代,C还有生产紧凑、快速运行程序以及处理硬件问题的能力。
C作为一种过程化语言(procedural language),它更强调程序设计中算法的一面,注重通过规定解决一个问题时计算机的具体操作步骤和使用明确编程语言实现之。即Data + Algorithms = Program。
早期过程化语言如FORTRAN,分支指令混乱(如goto语句的使用,程序被戏称为被称为spaghetti programming)。C在此基础上,引入更有纪律的编程风格,即结构化编程(structured programming),如for语句等行为良好的指令的使用。
C的另一个特色是自顶向下设计(Top-down design),即将一个大型问题分解为多个利于管理的小任务,如仍不方便解决,可以继续再分解,最终一个程序将被分解为一个个利于编程的模块,通过一个个具体的函数(function)来表示。

OOP

面向对象编程(object-oriented programming,OOP)的引入使得C++更适合大型编程,相比过程化编程更强调程序设计中数据的一面,因此面向对象编程注重设计与问题本质特征相适应的数据形式。

类(class)即是C++中描述这种新的数据形式的规范。而对象(object)即是符合类的描述的具体的数据结构。
通常来说,类定义了用来描述一个对象的数据和数据的相关操作。通过使用这些类的对象继续设计程序,这种从较低层次到较高层次,如从类到程序设计的过程,称为自底向上编程(bottom-up programming)

You could define a class to describe a rectangle.The data part of the specification could include such things as the location of the corners, the
height and width, the color and style of the boundary line, and the color and pattern used to fill the rectangle.The operations part of the specification could include methods for moving the rectangle, resizing it, rotating it, changing colors and patterns, and copying the rectangle to another location. If you then used your program to draw a rectangle, it would create an object according to the class specification.That object would hold all the data values describing the rectangle, and you could use the class methods to modify that rectangle. If you drew two rectangles, the program would create two objects, one for each rectangle.

OOP还具有如下优点:
①有助于创建可重用代码
②保护数据不被不正当访问
③多态性(Polymorphism)使得操作符和函数可被创建多个定义,由编程上下文决定哪个定义
④继承允许新类可由旧类派生。

generic programming

类属编程(generic programming)是C++的另一个特色,比起OOP强调编程的数据方面,generic programming更强调独立于特定的数据类型。

If, for example, you wanted to sort data of these various types, you would normally have to create a separate sorting function for each type. Generic programming involves extending the language so that you can write a function for a generic (that is, an unspecified) type once and use it for a variety of actual types. C++ templates provide a mechanism for doing that.

C++标准

C/C++ 标准

浅谈程序运行的机制

无论学习哪门语言,我觉得掌握程序运行的机制都是十分必要的,而这恰是计算机组成的重要课程。
创建并运行程序的步骤,通常依赖于具体的环境和C++编译器,但都有如下的步骤:

  1. 使用文本编辑器编写源代码(source code),保存为文件,C++源文件后缀通常为.cpp。这是我们学习的主要方面,即C++代码的语法规则。
  2. 编译源代码,即运行某个程序(即编译器)将源代码翻译为机器语言(machine language),保存为机器码的中间文件,即目标代码(object code)
  3. 链接,将目标代码和启动代码(startup code)和库代码(library code)链接起来,生成最终可执行代码(executable code)
    【基础学习】【C++】chapter 1: Getting started with C++
    参考:C语言程序的执行过程