一、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 小时前
WordPress 主题初体验:从 style.css 到 index.php、single.php 简单实战
后端·php·wordpress
带娃的IT创业者6 小时前
Python 异步编程完全指南:从入门到精通
服务器·开发语言·python·最佳实践·asyncio·异步编程
zzb15808 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
zzcufo8 小时前
OpenScreenInPopUp
笔记·学习
一只鹿鹿鹿8 小时前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
喵叔哟8 小时前
9. 【Blazor全栈开发实战指南】--Blazor调用JavaScript
开发语言·javascript·udp
wuqingshun3141598 小时前
如何停止一个正在退出的线程
java·开发语言·jvm
我命由我123458 小时前
Element Plus - Form 的 resetField 方法观察记录
开发语言·前端·javascript·vue.js·html·html5·js
Shining05968 小时前
CUDA 编程系列(三)《内存模型与规约优化》
人工智能·学习·其他·学习方法·infinitensor
朱包林8 小时前
Python基础
linux·开发语言·ide·python·visualstudio·github·visual studio