05 2020 档案
摘要:仓库初始化 git init 设置本地仓库签名 git config user.name user_name git config user.email user_email 设置系统用户签名 git config --global user.name user_name git config --
阅读全文
摘要:类型转换有 c 风格的,当然还有 c++风格的。 c 风格的转换的格式很简单(TYPE) EXPRESSION,但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合 适的,因为它可以在任意类型之间转换,比如你可以把一个指向const 对象的指针转换 成指向非 const 对象的指针
阅读全文
摘要:类模板使用实例 #include <iostream> using namespace std; template<typename T> class A { public: A(T t):a(t){} T getA() { return a; } private: T a; }; int main
阅读全文
摘要:函数模板的实例 #include <iostream> using namespace std; template<typename T> void myswap(T &a, T &b) { T t; t = a; a = b; b = t; } int main() { int x = 1; in
阅读全文
摘要:纯虚函数 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本 纯虚函数为个派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分) 纯虚函数声明语法: virtual 类型 函数名(参数表) = 0; #include <iostream> using nam
阅读全文
摘要:多态 从C++继承中的兼容原则中我们知道:父类指针可以直接指向子类对象,父类引用可以直接引用子类对象。当父类和子类有相同方法时调用的是父类方法,即是根据指针类型或引用类型来确定调用的方法类型的。如果我们想根据指针实际指向的对象类型(引用实际引用的类型)来决定调用的方法类型,需要把这个函数声明为虚函数
阅读全文
摘要:重载(添加) :a 相同的范围(在同一个类中)b 函数名字相同c 参数不同d virtual关键字可有可无 重写(覆盖) 是指派生类函数覆盖基类函数,特征是:a 不同的范围,分别位于基类和派生类中b 函数的名字相同c 参数相同d 基类函数必须有virtual关键字 重定义(隐藏) 是指派生类的函数屏
阅读全文
摘要:如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性 如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象 要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承
阅读全文
摘要:1、当子类成员变量与父类成员变量同名时 2、子类依然从父类继承同名成员 3、在子类中通过作用域分辨符::进行同名成员区分(在派生类中使用基类的同名成员,显式地使用类名限定符) 4、同名成员存储在内存中的不同位置 #include <iostream> using namespace std; cla
阅读全文
摘要:继承中构造析构调用原则: 1、子类对象在创建时会首先调用父类的构造函数 2、父类构造函数执行结束后,执行子类的构造函数 3、当父类的构造函数有参数时,需要在子类的初始化列表中显示调用 4、析构函数调用的先后顺序与构造函数相反 继承和组合并存,构造和析构原则: 1. 先构造父类,再构造成员变量、最后构
阅读全文
摘要:类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。 类型兼容规则中所指的替代包括以下情况: (1)父类指针可以直接指向
阅读全文
摘要:类和类之间的关系 has-A:包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。 uses-A :一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 is-A :机制称为“继承”。关系具有传递性,
阅读全文
摘要:静态成员 在 C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供 所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间 的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。 class StringBad { private: static int
阅读全文
摘要:逻辑地址和虚拟地址 逻辑地址 •逻辑地址:又称相对地址,即用户编程所使用的地址空间 •逻辑地址从0开始编号,有两种形式: •一维逻辑地址(地址) •二维逻辑地址(段号:段内地址) 段式程序设计 •把一个程序设计成多个段 •代码段、数据段、堆栈段、等等 •用户可以自己应用段覆盖技术扩充内存空间使用量
阅读全文
摘要:单线程结构进程 •传统进程是单线程结构进程 单线程结构进程的问题 •单线程结构进程在并发程序设计上存在的问题 •进程切换开销大 •进程通信开销大 •限制了进程并发的粒度 •降低了并行计算的效率 解决问题的思路 •把进程的两项功能,即“独立分配资源”与“被调度分派执行”分离开来 •进程作为系统资源分配
阅读全文
摘要:进程切换 •进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行 •进程切换实质上就是被中断运行进程与待运行进程的上下文切换,处理过程是: •保存被中断进程的上下文 •转向进程调度 •恢复待运行进程的上下文 模式切换 •进程切换必须在操作系统内核模式下完成,这就需要模式切换 •模式切
阅读全文
摘要:概念级的OS进程管理软件 •关键的进程管理软件包括: •系统调用/中断/异常处理程序 •队列管理模块 •进程控制程序 •进程调度程序(独立进程居多) •进程通信程序(多个程序包) •终端登录与作业控制程序、性能监控 程序、审计程序等外围程序 进程实现的队列模型 队列管理模块 •队列管理模块是操作系统
阅读全文
摘要:进程控制块(Process Control Block,PCB) • 进程控制块PCB是OS用于记录和刻画进程状态及环境信息的数据结构 • 借助PCB,OS可以全面管理进程的物理实体,刻画进程的执行现状,控制进程的执行 进程控制块 - 标识信息 用于存放唯一标识该进程的信息 •系统分配的标识号 •系
阅读全文
摘要:进程基础 进程的提出 •操作系统必须全方位地管理计算机系统中运行的程序 •因此,操作系统为正在运行程序建立一个管理实体——进程 进程的概念 •进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动 •进程是操作系统进行资源分配和调度的一个独立单位 进程的组成 •一个进程包括五个实体部分,分别
阅读全文
摘要:操作系统的概念 操作系统(Operating System),简称OS,是计算机系统最基础的系统软件,管理软硬件资源、控制程序执行,改善人机界面,合理组织计算机工作流程,为用户使用计算机提供良好运行环境 操作系统的组成 •进程调度子系统 •进程通信子系统 •内存管理子系统 •设备管理子系统 •文件管
阅读全文
摘要:计算机系统 计算机系统的组成 •硬件系统 •软件系统 计算机系统的用户视图 程序员的计算机系统视图 计算机硬件系统 计算机硬件系统的组成 存储程序计算机 •冯·诺伊曼等人在1946年总结并明确提出, 被称为冯·诺伊曼计算机模型 •存储程序计算机在体系结构上主要特点 •以运算单元为中心,控制流由指令流
阅读全文
摘要:wait() 调用wait()方法后,线程进入等待状态,wait()方法不会返回,直到将来某个时刻,线程从等待状态被其他线程唤醒后,wait()方法才会返回,然后,继续执行下一条语句。 wait()方法的执行机制非常复杂,它不是一个普通的Java方法,而是定义在Object类的一个native方法,
阅读全文
摘要:Java的线程锁是可重入的锁。 什么是可重入的锁?我们还是来看例子: public class Counter { private int count = 0; public synchronized void add(int n) { if (n < 0) { dec(-n); } else {
阅读全文
摘要:当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。这个时候,有个单线程模型下不存在的问题就来了:如果多个线程同时读写共享变量,会出现数据不一致的问题。 Java程序使用synchronized关键字对一
阅读全文
摘要:Java语言内置了多线程支持。当Java程序启动的时候,实际上是启动了一个JVM进程,然后,JVM启动主线程来执行main()方法。在main()方法中,我们又可以启动其他线程。 Java 提供了三种创建线程的方法: 通过实现 Runnable 接口; 通过继承 Thread 类本身; 通过 Cal
阅读全文
摘要:接口介绍 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法
阅读全文
摘要:抽象类 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。 在Java语言中使用abstract class来定义抽象类 public abstract class Employee{
阅读全文
摘要:重写 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写规则 参数列表必须完全与被重写方法的相同。 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同
阅读全文
摘要:继承的特性 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 子类可以用自己的方式实现父类的方法。 Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以
阅读全文
摘要:创建目录: File类中有两个方法可以用来创建文件夹: mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。 mkdirs()方法创建一个文件夹和它的所有父文件夹。 import java
阅读全文
摘要:FileInputStream 该流用于从文件读取数据,它的对象可以用关键字 new 来创建。 有多种构造方法可用来创建对象。 可以使用字符串类型的文件名来创建一个输入流对象来读取文件: InputStream f = new FileInputStream("C:/java/hello"); 也可
阅读全文
摘要:java 的控制台输入由 System.in 完成。 为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。 下面是创建 BufferedReader 的基本语法: BufferedReader br = new Buffe
阅读全文