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

相关推荐
王璐WL20 小时前
【C++】类的默认成员函数(上)
c++
斯维赤20 小时前
每天学习一个小算法:归并排序
学习·算法·排序算法
椰羊~王小美20 小时前
实践项目来串联概念(嵌入式、网络、后端、前端、AI)
学习
王老师青少年编程20 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:区间覆盖(加强版)
c++·算法·贪心·csp·信奥赛·区间贪心·区间覆盖(加强版)
码事漫谈20 小时前
兵临城下:DeepSeek-V4 的技术突围与算力“成人礼”
后端
hkyvqr_71120 小时前
Redis Stream数据结构与消费组
编程
无巧不成书021820 小时前
零基础Java网络编程全解:从核心概念到Socket实战,一文打通Java网络通信
java·开发语言·网络
饭小猿人20 小时前
Flutter实现底部动画弹窗有两种方式
开发语言·前端·flutter
三水不滴20 小时前
SpringAI + SpringDoc + Knife4j 构建企业级智能问卷系统
经验分享·spring boot·笔记·后端·spring
三品吉他手会点灯21 小时前
C语言学习笔记 - 15.C编程预备计算机专业知识 - CPU 内存条 硬盘 显卡 主板 显示器 之间的关系
c语言·笔记·学习