一、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.

相关推荐
kfaino1 天前
码农的AI翻身(三)你好,我叫 Embedding
后端·ai编程
葫芦和十三1 天前
图解 MongoDB 18|复制集拓扑:Primary、Secondary 和 Arbiter 的分工
后端·mongodb·面试
爱勇宝1 天前
大多数人不是在使用 AI 赚钱,而是在帮 AI 公司赚钱
前端·后端·程序员
程序员cxuan1 天前
虽迟但到!GPT-5.6 终于来了!
人工智能·后端·程序员
IT_陈寒1 天前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
葫芦和十三1 天前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试
葫芦和十三1 天前
图解 MongoDB 16|压缩:snappy、zstd 和 zlib 的取舍
后端·mongodb·面试
苍何1 天前
终于找到免费开源TTS模型,克隆声音不要钱,本地电脑也能跑
后端
用户593608741401 天前
Spring AI 集成 DeepSeek 原生供应商并实现think模式
后端
追逐时光者1 天前
别再满网找零散工具了,腾讯 QQ 浏览器这个“帮小忙”工具箱真能省时间
前端·后端