01 - 第一章 预备知识

1. C++简介

C++世界,在C语言的基础上添加了对面向对象编程和泛型编程的支持,高效、简洁、快速和可移植性。

C++融合了3种不同的编程方式:C语言代表的过程性语言、C++在C语言基础上添加的代表的面向对象语言、C++模版支持的泛型编程。

2. C的过程性编程

一般来说,计算机语言要处理两个概念——数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。

C语言,过程性语言,强调的是编程的算法方面。从概念上来说,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这些操作。程序命令计算机按一系列流程生成特定的结果,就像菜谱指定了厨师做蛋糕时应遵循的一系列步骤一样。

3. C++的面向对象编程

与强调算法的过程性编程不同的是,OOP强调的是数据

OOP程序设计方法首先设计类,它们准确地表示了程序要处理的东西。例如,绘图程序可能定义表示矩形、直线、圆、画刷、画笔的类。类定义描述了对每个类可执行的操作,如移动圆或旋转直线。

OOP编程并不仅仅是将数据和方法合并为类定义。例如,OOP还有助于创建可重用的代码,这将减少大量的工作。信息隐藏可以保护数据,使其免遭不适当的访问。多态让您能够为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。继承能让您能够使用旧类派生出新类。

4. C++的泛型编程

它与OOP的目标相同,即使重用代码和抽象通用概念的技术更简单。不过OOP强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型,两者的侧重点不同。C++模板提供了完成这种任务的机制。

5. C++的可移植性

C++ 本身是一个跨平台的编程语言,但由于各个平台(如 Windows、Linux、macOS)对底层硬件和操作系统的抽象不同,代码在移植过程中可能会遇到一些问题。

1.标准库

C++ 标准库旨在提供跨平台支持,比如 I/O 操作、数据结构、字符串处理等功能。只要代码依赖于 C++ 标准库(如 iostreamvector),那么在不同平台之间的移植性相对较高。然而,标准库的实现可能会在某些平台上略有不同,尤其是在性能和细节上可能存在差异。

2.操作系统特定的 API

C++ 程序通常需要与操作系统进行交互(如文件系统、网络、进程管理等)。在这些场景下,各平台的 API 不尽相同,例如:

  • Windows 使用 WinAPI 进行系统调用。

  • Linux 使用 POSIX 标准(例如 pthreads)。

  • macOS 也有自己的系统调用方式。

如果 C++ 代码依赖于特定操作系统的 API,那么在移植到其他平台时需要进行修改,或者使用跨平台库(如 Boost、Qt 等)来代替。

3.编译器差异

不同平台上使用的编译器(如 GCC、Clang、MSVC)可能会有特定的扩展、优化和不一致之处。在一些平台上有效的代码可能在其他平台上无法编译,或者行为不一致。例如:

  • 数据类型大小(如 intlong)在不同平台上可能不同。

  • 内存对齐方式和大小端(big-endian 和 little-endian)差异。

为了增强代码的可移植性,使用 stdint.h 中定义的数据类型(如 int32_t)可以帮助减少这些问题。

4.文件路径和文件系统差异

  • Windows 使用反斜杠(\)作为路径分隔符,而 Linux 和 macOS 使用正斜杠(/)。

  • Windows 的文件路径不区分大小写,而 Linux 和 macOS 通常区分。

在编写代码时,可以使用跨平台的库或工具(如 C++17 的 std::filesystem 或 Boost.Filesystem)来处理文件路径,以提高跨平台兼容性。

5.图形、音频等硬件接口

如果代码涉及图形、音频或其他硬件接口,跨平台性会更具挑战性,因为这些领域的 API 差异非常大。为了解决这个问题,可以使用跨平台库,如:

  • SDL 和 SFML(用于图形、音频、输入等多媒体开发)。

  • OpenGL 和 Vulkan(用于图形渲染)。

  • OpenAL(用于音频处理)。

6.线程和并发

  • C++11 之后引入了标准线程库(<thread><mutex>等),这对跨平台并发编程大有帮助。

  • 但在一些低级并发操作上,操作系统的差异可能仍然存在,使用跨平台的并发库(如 Boost.Thread)可以提高可移植性。

7.编译条件和宏定义

使用条件编译(如 #ifdef _WIN32#ifdef __linux__)可以在特定平台上编译特定代码,从而提高移植性。不过,依赖条件编译会增加代码复杂性,不如使用跨平台库来实现更简单。

总结

C++ 的可移植性在很大程度上取决于代码依赖的库和 API。如果代码仅依赖于 C++ 标准库,那么跨平台性相对较高。然而,对于涉及到平台特定功能的代码,可以使用跨平台库、条件编译和避免平台依赖来增强可移植性。

6. 程序创建的技巧

假如你编写了一个C++程序,如何让它运行起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值