友元 在 C++ 中,类的私有成员(包括私有数据成员和私有成员函数)只能被该类自己的成员函数以及友元函数/类访问。友元关系是一种特殊的访问权限,允许非成员函数或类访问另一个类的私有成员。 友元关系通过在类内部使用 friend 关键字声明建立。可以声明友元函数或友元类: 友元函数:可以是 普通函数,也可以是 成员函数,它们可以访问声明它们为友元的类…
输入输出流 输入输出的含义 在计算机编程中,输入和输出(I/O)是程序与外部世界进行数据交换的基本方式。通常情况下,我们通过终端,也就是键盘和显示器,来进行数据的输入和输出。当我们从键盘键入数据或在屏幕上看到程序的运行结果时,这就是最直观的 I/O 操作。然而,从操作系统的角度来看,所有的输入输出设备,包括键盘、显示器、磁盘驱动器、甚至网络连接等,…
面向对象思想 过程论(Procedural Programming) 核心观点: 程序由一系列步骤或过程组成,这些步骤按照一定的顺序执行。 数据和逻辑是分离的,数据是被处理的对象,而逻辑是处理数据的规则。 优点: 逻辑清晰:对于简单的、顺序的任务,过程论可以提供清晰的执行路径。 易于理解和控制:在小型或结构化程度高的应用中,过程论易于理解和控制。 …
命名空间 为什么要使用命名空间 命名冲突指的是在同一个作用域内,存在两个或多个具有相同名称的实体。 在 C 语言中,避免此类冲突通常需要开发者遵循特定的命名约定。例如,通过在变量名前添加开发者的标识符,可以在一定程度上减少冲突的可能性: int hw_cpp_tom_num = 100; int xm_cpp_bob_num = 200; C++ …
需求分析 假设: 我们结合学过的文件操作、网络通信、以及进程和线程的知识,实现一个基本的文件下载服务器模型,我们需要做哪些准备工作,或者说我们怎么设计整个数据通信逻辑。 首先,服务器需要能够处理大量连接的频繁接入和断开,这就要求我们不能简单地让一个进程同时处理连接接入和业务逻辑,这样的设计在现代应用领域是低效的。它不仅无法有效解耦,增加了代码书写的…
地址处理 大端地址和小端地址 大端法和小端法 大端法(Big-Endian) 在大端法中,一个多字节值的高位字节(即“大端”)存储在内存的低地址端,而低位字节(即“小端”)存储在高地址端。这种存储顺序使得大端法在字节对齐的内存访问中更为直观。 小端法(Little-Endian) 小端法与大端法相反,低位字节存储在内存的低地址端,而高位字节存储在高…
应用层 在网络通信的层次结构中,应用层起着核心作用,它提供了用户与网络服务交互的平台。开发者可以依据具体的应用需求,实现定制化的逻辑和功能,使得网络服务在隐藏了底层复杂性的同时,能够灵活适应多样化的应用场景。 应用层包含了多种高级网络通信协议,如 HTTP 协议用于网页浏览、SMTP 协议用于电子邮件的发送、FTP 协议用于文件的传输等。这些协议确…
线程的同步和互斥 在多线程编程中,共享资源的使用是提高程序运行效率的关键,但同时也带来了一系列挑战。由于线程间缺乏隔离机制,共享同一内存地址的操作可能导致所谓的“竞争条件”,这是指多个线程同时访问并试图修改同一资源时可能发生的问题。这种情况会导致程序的执行结果与预期出现显著偏差。 例如,在以下代码示例中,两个线程被设计为对一个共享变量进行递增操作,…
线程概述 从进程到线程 在计算机系统中,多进程设计允许用户在同一台计算机上同时处理多个独立的工作任务。操作系统负责管理这些进程,通过调度算法合理地在它们之间分配 CPU 资源、内存、文件等资源。使用多进程设计不仅可以提高单个应用的吞吐量和响应时间,还可以在某个进程因死循环或等待 IO 操作而无法完成任务时,由操作系统调度其他进程来完成任务或响应用户…
信号基础 中断 中断是计算机系统中硬件和操作系统之间进行通信的一种基础机制,它使得系统能够响应紧急事件或需要立即处理的情况。中断分为两大类: 硬件中断:由硬件设备触发,例如键盘、鼠标、磁盘驱动器等。当这些设备需要 CPU 注意时,它们会发送一个信号给 CPU,请求进行某些操作,如数据传输或状态变更。 软件中断:由软件程序触发,通常是通过执行特定的中…