03.运算符重载
运算符重载的基本概念 对抽象数据类型也能够直接使用C++提供的运算符 123返回值类型 operator 运算符(形参表) { ...} 在程序编译时 把 含运算符的表达式 -> 对 运算符函数 的调用 把 运算符的操作数 -> 运算符函数的参数 运算符被多次重载时, 根据 实参的类型 决定调用哪个运算符函数 重载为普通函数时, 参数个数为运算符目数 重载为成员函数时, 参数个数为运算符目数减一(第二个参数) 不允许定义新的运算符 不是所有运算符都能被重载 () [] -> = 重载时必须声明为类的成员函数 赋值运算符的重载 赋值运算符 “=” 只能重载为 成员函数 浅复制/浅拷贝 执行逐个字节的复制(指针)工作 深复制/深拷贝 将一个对象中指针变量指向的内容复制到另一个对象中指针成员对象指向的地方 赋值运算符重载返回类型void不好 如: a = (b =...
02.类和对象
内联成员函数和重载成员函数 内联成员函数 inline + 成员函数 整个函数体出现在类定义内部 重载成员函数 成员函数 – 带缺省参数 避免缺省参数函数和无参函数的二义性 构造函数 一般构造函数 复制构造函数 只有一个参数, 即对同类对象的引用 T :: T(T&)或T :: T(const T&) 若未定义, 编译器生成默认复制构造函数(完成复制功能) 123456class Complex {private: double real, imag;};Complex c1; //调用缺省无参构造函数Complex c2(c1); //调用缺省的复制构造函数, 将c2初始化成和c1一样 什么时候起作用 当用一个对象去初始化同类的另一个对象时 12Complex c2(c1);Complex c2 = c1; //初始化语句, 非赋值语句 如果某函数有一个参数是类A的对象, 那么该函数被调用时, 类A的复制构造函数将被调用 123456void Func(A...
01.从C走进C++
函数指针 定义形式: 类型名 (*指针变量名)(参数类型1, 参数类型2, ...); 使用方法: 函数指针名(实参表); 12345678910111213#include <stdio.h>void PrintMin(int a, int b) { if (a < b) printf("%d", a); else printf("%d", b);}int main() { void (*pf)(int, int); int x = 4, y = 5; pf = PrintMin; pf(x, y);} qsort库函数 void qsort(void *base, int nelem, unsigned int width,int (*pfCompare)(const void *, const void *)); 12345678910111213141516#include...
05.设备管理
I/O控制器 I/O设备和CPU的"中介" 功能 组成 一个I/O控制器可能会对应多个设备 数据寄存器, 控制寄存器, 状态寄存器可能有多个(如: 每个控制/状态寄存器对应一个具体的设备), 且这些寄存器都要有相应的地址, 才能方便CPU操作. 有的计算机会让这些寄存器占用内存地址的一部分, 称为内存映像I/O; 另一些计算机则采用I/O专用地址, 即寄存器独立编址 I/O控制方式 即: 用什么样的方式来控制I/O设备的数据读/写 注意点 完成一次读/写操作的流程 CPU干预的频率 数据传送的单位 数据的流向 主要缺点和主要优点 程序直接控制方式 完成一次读/写操作的流程 轮询 CPU干预的频率 很频繁, I/O操作开始之前, 完成之后需要CPU介入, 并且在等待I/O完成的过程中CPU需要不断地轮询检查 数据传送的单位 每次读/写一个字 数据的流向 读操作(数据输入) : I/O设备 -> CPU -> 内存 写操作(数据输出) : 内存 -> CPU...
04.文件管理
概述 文件的定义 一组有意义的信息的集合 文件的属性 文件名 标识符: 一个系统的各文件标识符唯一 类型: 指明文件的类型 位置: 文件存放的路径(让用户使用), 在外存的地址(让操作系统使用) 大小 创建时间, 上次修改时间, 文件所有者信息 保护信息: 对文件进行保护的访问控制信息 文件的逻辑结构 文件目录结构 文件的基本操作 操作系统向上层提供的基础功能 创建文件 – create系统调用 读文件 – read系统调用 写文件 – write系统调用 删除文件 – delete系统调用 打开文件 – open系统调用 关闭文件 – close系统调用 文件的物理结构 文件存储空间管理 文件的其他操作 操作系统需要提供的其他文件管理功能 文件共享 文件保护 文件的逻辑结构 用户视角 无结构文件 文件内部的数据就是一系列二进制流或字符流组成 又称"流式文件" 如 .txt...
03.内存管理
概述 内存空间的分配与回收 连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 非连续分配管理方式 内存空间的扩充 覆盖技术 交换技术 虚拟存储技术 地址转换 操作系统需要提供地址转换功能, 负责程序的逻辑地址与物理地址的转换 存储保护 设置上下限寄存器 重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器) 覆盖与交换 覆盖技术 必须由程序员声明覆盖结构, 操作系统完成自动覆盖 缺点: 对用户不透明, 增加了用户编程负担 交换技术 内存空间紧张时, 系统将内存中某些进程暂时换出外存, 把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度) 区别 覆盖是在同一个程序或进程中的 交换是在不同进程(或作业)之间的 连续分配管理方式 为用户进程分配的必须是一个连续的内存空间 单一连续分配 固定分区分配 操作系统需要建立一个数据结构——分区说明表, 来实现各个分区的分配与回收 优点: 实现简单, 无外部碎片 缺点: 当用户程序太大时,...
02.进程管理
概述 概念 程序: 是静态的, 就是个存放在磁盘里的可执行文件, 就是一系列的指令集合 进程: 是动态的, 是程序的一次执行过程 PID: 当进程被创建时, 操作系统为该进程分配一个唯一的, 不重复的进程号 进程实体组成 PCB(进程控制块): 进程存在的唯一标志, 操作系统对进程进行管理工作所需的信息都存在PCB中 进程描述信息 进程标识符PID 用户标识符UID 进程控制和管理信息 CPU, 磁盘, 网络流量使用情况统计… 进程当前状态: 就绪态/阻塞态/运行态… 资源分配清单 正在使用哪些文件 正在使用哪些内存区域 正在使用哪些I/O设备 处理机相关信息 如PSW, PC等等各种寄存器的值(用于实现进程切换) 程序段 程序的代码(指令序列) 数据段 运行过程中产生的各种数据(如: 程序中定义的变量) 特征 动态性: 进程是程序的一次执行过程, 是动态地产生, 变化和消亡的 并发性: 内存中有多个进程实体, 各进程并发执行 独立性: 进程是能独立运行, 独立获得资源,...
01.操作系统概述
概述 概念 操作系统是指控制和管理整个计算机系统的硬件和软件资源, 并合理地组织调度计算机的工作和资源的分配; 以提供给用户和其他软件方便的接口和环境; 它是计算机系统中最基本的系统软件 功能 作为系统资源的管理者 提供的功能 处理机管理 存储器管理 文件管理 设备管理 向上层提供方便易用的服务 GUI 命令接口 联机命令接口 脱机命令接口 程序接口: 可以在程序中进行系统调用来使用程序接口. 普通用户不能使用程序接口, 只能通过程序代码间接使用 作为最接近硬件的层次 对硬件机器的拓展 特征 并发: 指两个或多个事件在同一时间间隔内发生. 宏观上同时发生, 微观上交替发生 共享: 系统中的资源可供内存中多个并发执行的进程共同使用 虚拟: 把一个物理上的实体变为若干个逻辑上的对应物. 物理实体是实际存在的, 而逻辑上的对应物是用户感受到的 空分复用技术(虚拟存储技术) 时分复用技术(虚拟处理器技术) 异步: 在多道程序环境下, 允许多个程序并发执行, 但由于资源有限, 进程的执行不是一贯到底的,...
06.Application Layers
概述 应用层是计算机网络体系结构的最顶层, 是设计和建立计算机网络的最终目的, 也是计算机网络中发展最快的部分 客户/服务器方式 (C/S方式) 和 对等方式 (P2P方式) 网络应用程序运行在处于网络边缘的不同的端系统上, 通过彼此间的通信来共同完成某项任务 开发一种新的网络应用首先要考虑的问题是网络应用程序在各种端系统上的组织方式和它们之间的关系 客户/服务器方式 客户和服务器是指通信中所涉及的两个应用进程 客户/服务器方式所描述的是进程之间服务和被服务的关系 客户是服务请求方, 服务器是服务提供方 服务器总是处于运行状态, 并等待客户的服务请求. 服务器具有固定端口号(例如HTTP服务器的默认端口号为80), 而运行服务器的主机也具有固定的IP地址 C/S方式是因特网上传统的, 同时也是最成熟的方式, 很多我们熟悉的网络应用采用的都是C/S方式. 包括万维网WWW, 电子邮件, 文件传输FTP等 基于C/S方式的应用服务通常是服务集中型的,...
05.Transport Layer
运输层概述 物理层, 数据链路层, 网络层共同解决了将主机通过异构网络互联起来所面临的问题, 实现了主机到主机的通信 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务, 运输层协议又称为端到端协议 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑, 所采用的路由选择协议等), 它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道 根据应用需求的不同, 因特网的运输层为应用层提供了两种不同的运输协议, 即面向连接的TCP和无连接的UDP 端口号 运行在计算机上的进程使用进程标识符PID来标志 不同操作系统又使用不同格式的进程标识符, 所以必须使用统一的方法对TCP/IP体系的应用进程进行标识 TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程 端口号使用16bit表示, 取值范围0~65535 熟知端口号: 0~1023, IANA把这些端口号指派给TCP/IP体系中最重要的一些应用协议, 例如:...