一、C++ 发展与程序创建

C++ 在 C 语言的基础上添加了面向对象编程和泛型编程的支持,它继承了 C 语言的特性,又具备全新的编程方法(如果你之前是个 C 语言高手,那么当你学习 C++ 时就需要改变或摒弃原来 C 语言的一些编程习惯)。

1 C++ 简史

1.1 C 语言

20 世纪 70 年代初,Dennis Ritchie 致力于开发 UNIX 操作系统,他需要一种可以生成简洁又快速的程序、可以控制硬件的语言。

汇编语言可以满足 Dennis 的要求,它是低级语言,直接操纵硬件。但是操作系统需要在不同的计算机上运行,每个计算机的硬件又有所不同,汇编语言直接针对硬件,同样一段的汇编程序并不能通用到所有计算机上,但是针对不同硬件编写汇编程序好像也不太现实。

高级语言专注于解决问题,而不是针对特定的硬件,编译器可以将高级语言翻译成机器语言供计算机执行。Dennis 需要低级语言的效率、硬件控制能力,又需要高级语言的通用性和可移植性,所以发明了 C 语言。

1.2 C 语言的面向过程编程

计算机程序涉及到两个概念:数据和算法。数据是程序使用、处理的信息;算法是程序使用的方法。

C 语言是面向过程的编程,更多强调算法,也就是先确定计算机要采取的操作然后编程实现它们。它同时使用结构化编程(如:循环语句、条件语句等)和自顶向下的设计(将大型程序分解成小型任务),便于更好地编写程序。

1.3 面向对象编程

面向对象编程相比于面向过程编程,强调的是数据,让语言适配于问题(根据问题创建相应的数据格式)。C++ 中,类描述数据的格式,对象是根据类所构造的特定数据。类规定了可使用的数据以及这些数据可执行的操作,OOP 先定义类(低级组织),然后创建使用类的对象(高级组织),这就是自下而上的编程。

C++ 专注于问题的表示而不是解决方式,它可以使用、修改已有的代码,大大减少了程序员的工作量。

1.4 泛型编程

泛型编程的目标也是复用代码和抽象通用概念,但它相对于 OOP 强调独立于特定数据类型,一般提供执行常见任务的工具。

泛型编程需要对语言进行扩展,以便只编写一个函数就可以应用到各个类型。

1.5 C++ 起源

20 世纪 80 年代初,Bjarne Stroustrup 在贝尔实验室发明了 C++ 语言,他更关心编程语言的实用性而不是其原理、风格,他在 C 语言的基础上添加了 OOP 特性和泛型编程,所以 C++ 是 C 的超集,任何有效的 C 程序都是有效的 C++ 程序。

2 可移植性和标准

可移植性面对两个问题:硬件和语言。硬件特定的程序是不可移植的,应避免;类似于人的语言,计算机语言也可以有方言,ANSI / ISO 致力于制定 C++ 标准。

3 C++ 程序的创建

C++ 程序运行步骤:

  1. 使用文本编辑器编写程序(源代码),保存;

  2. 编译,将源代码翻译成机器语言,生成的文件就是程序的目标代码;

  3. 将目标代码同其他代码(目标代码所使用的函数的目标代码和标准启动代码)链接起来,生成可执行代码。

3.1 创建源代码文件

C++ 实现可以在 IDE 上进行,有的只能在命令行进行(这种情况可以使用任何文本编辑器创建、修改源码)。对源代码文件命名时,要使用正确的后缀(扩展名),以将文件标识为 C++ 文件。使用什么后缀取决 C++ 实现,如:Microsoft Visual C++ 是 cpp, cxx, cc.

3.2 编译和链接

C++ 一开始的编译是靠 cfront 实现的,它将 C++ 语言翻译成 C 语言再由 C 语言的编译器继续编译。C++ 越发普及,更多实现也倾向于直接创建 C++ 编译器。下面介绍 Linux 和 Windows 的编译机理。

Linux 最常用的编译器是 g++,多数版本都有。假定源代码文件名是 myfile.cpp,输入下述代码:

bash 复制代码
g++ myfile.cpp

便会生成可执行文件 a.out.

相关推荐
古城小栈2 小时前
后端视角:拆解春晚背后的高可用技术架构
后端·架构
一株菌子2 小时前
10.12 总结
开发语言·python
power 雀儿2 小时前
LibTorch激活函数&LayerNorm归一化
c++·人工智能
心之语歌2 小时前
flutter provider 使用,状态管理更新跨组件数据共享
后端·flutter
枷锁—sha2 小时前
【CTFshow-pwn系列】03_栈溢出【pwn 051】详解:C++字符串替换引发的血案与 Ret2Text
开发语言·网络·c++·笔记·安全·网络安全
沙白猿2 小时前
【TJXT】Day3
java·开发语言
Loo国昌2 小时前
【AI应用开发实战】05_GraphRAG:知识图谱增强检索实战
人工智能·后端·python·语言模型·自然语言处理·金融·知识图谱
一个处女座的程序猿O(∩_∩)O2 小时前
Python面向对象的封装特性详解
开发语言·python
zhaoyin19942 小时前
python基础
开发语言·python