C++文件流
iostream 提供了cin cout 分别用于从标准输入读取流和向标准输出写入流
cout 标准输出 屏幕 输出写入
fstream文件流
cin 从标准输入读取
cout 向标准输入写入
ofstream 向文件写入
ifstream 从文件读取
fstream 从文件读取、向文件写入
文件处理 <iostream>
<fstream>
打开文件 从文件读取信息或者向文件写入信息ofstream ifstream;
必须先打开
ofstream和fstream对象都可以用来打开文件进行写操作
打开文件进行读取ifstream fstream
open()函数标准语法
open()函数是fstream ifstream ofstream对象的一个成员
void open(const char *filename,ios::openmode mode);
open()成员函数的第一个参数指定要打开的文件的名称和位置 要打开的文件的名称位置,第二个参数定义文件被打开的模式
ios::app
ios::ate 文件打开后定位到文件末尾
打开模式
iso::in
ios::out 写入
ofstream 写入
ios::trunc 文件已经存在 内容将在打开文件之前被切段 文件长度为0
两种或是两种以上模式集合使用
写入模式ios::out
ios::in 读取
ifstream
ofstream
打开一个文件用于读写
fstream afile;
声明对象
类对象成员
fstream ffile
ffile.open("file.dat",ios::out | ios::in)
关闭文件
程序终止 会自动关闭刷新流 释放所有分配的内存 关闭打开的文件
函数是 类对象的成员
fstream ifstream ofstream类对象成员
void c loese()
写入文件
流插入运算符<<向文件写入信息
输出信息到屏幕 ofstream fstream
刘提取 读取
ifstream fstream
流插入
文件位置指针
istream和ostream都提供了用于重新定义文件位置指针的成员函数重新定位文件位置指针函数成员函数包括关于
istream seekg("seek get")
文件位置指针
file seek pointer;
position
istream ostream 提供了用于重新定位文件位置指针的成员
重新定位文件位置指针的成员函数
seekg 长整形 指定查找方向
fileObject.seekg(n);
把文件的度读指针从fileObject当前位置向后移n个字节
fileObject.seekg(n,ios::end)
文件的读指针从fileObjace末尾往回移动n个字节
定位到fileObject末尾
fileObject.seekg(0,ios::end);
写(输出) 与 流插入运算符<<
读(输入) 与 流提取运算符 >>
exception 异常程序在执行期间产生的问题
程序运行时发生的特殊情况异常提供了一种转移程序控制权的方式
c++异常处理涉及到三个关键字try catch throw
throw问题出现 程序抛出异常 通过throw关键字完成
catch 想要处理问题的地方,通过异常处理程序捕获异常catch关键字 catch捕获异常
try
try中的代码标识将被激活的特殊异常 try跟多个catch
有一个块抛出异常 捕获异常的方法使用try catch try块中放置可能抛出异常的 代码
try中放置可能抛出异常的代码,try块中的代码被称为保护代码
try放置可能抛出异常的代码,try块中的 代码被称为保护代码
try
{
//保护代码
}catch(ExceptionName e1)
{
//catch block
}catch(ExceptionName e2)
{
//catch block
}catch(ExceptionName eN)
{
//catch block;
}
C++异常处理
执行期间产生的问题
运行发生的特殊情况 异常提供了一种转移程序控制权的方式
throw 出现问题 程序抛出异常
catch 想处理问题的地方 通过异常处理程序捕获异常 catch关键字用于捕获异常
try块中的代码标识将被激活的特定异常
try块代码标识将被激活的特定异常
try块中的保护代码标识将被激活的特定异常
malloc() new不只是分配内存任何 动态分配内存的变量不再需要使用 delete操作符释放占用内存
delete pvalue;
堆:函数中暂时未使用的内存 在程序运行 用于动态分配的内存
栈:函数中所有申明的变量使用的内存都是
stack
namespace
区分它们 使用名字之外使用一些额外的信息 std::
应用程序
可用的库中也存在一个相同的函数
编译器无法判断 那个
命名空间 作为附加信息来区分库相同名称的标识
上下文
使用命名空间定义了上下文 命名空间就是定义了一个范围
定义命名空间
命名空间的定义使用关键字namespace using namespace std;
命名空间的定义使用关键字namespace 后跟命名空间的名称;
namespace namespace_name
{
//
为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称
name::code; code 变量函数
命名空间如何为变量或函数等实体定义范围
命名空间如何为变量或函数等实体定义范围
using
使用using namespace 這样在使用命名空间时就可以不用在前面加上命名空间的名称
這个指令告诉编译器 后续的代码将使用指定的命名空间中的名称
using namespace 使用命名空间 不用在前面加上命名空间的名称 告诉编译器 后续的代码将使用指定的命名空间名称
using指令 指定命名空间中的特定项目
使用std命名空间的cout
using std::cout;
命名空间中特定名称
using namespace::item
整个命名空间
using namespace namespaceName;
随后代码 使用cout不用加命名空间名称作为前缀
但是std命名 空间其他项目仍加上命名空间名称作为前缀
using指令引入的名称遵循正常的范围规则
using指令引入的名称遵循正常的范围规则 名称从使用using指令可见
using
命名空间可以定义在几个不同的部分
不连续命名空间
命名空间定义在几个不同的部分命名空间由几个单独定义的部分组成命名空间的各个组成部分可以分散在多个文件
具体到那个命名空间下的项目item using namespaceName::item
引入命名空间 下 的所
using namespace namespaceName
模板
泛型编程的基础
泛型编程以一种独立任何特定类型的方式编程
泛型编程即以一种独立于任何特定类型的方式编写代码
库容器 迭代器
template 模板泛型编程的
函数模板
template <class type> ret-type func-name(parameter list);
template
模板支持参数化多态工具 模板使用户为类或者函数
模板 使用模板 可以使用户为类或者函数声明一种一般模式 是用户为类或函数申明为一种一般模式
使得类中的某些数据成员或者成员函数的参数
模板支持参数化多态 模板可以使用户为类或者函数声明一种一般模式
类中 的某些数据成员或者成员函数的参数 返回值取得任意类型
模板 是一种对类型进行参数化的工具
让程序的实现与类型无关
模板的声明定义只能在全局
不能在main函数中声明或定义模板
既可以在该函数中使用内置类型的地方都可以使用模板形参参数
模板形参需要调用该模板函数 提供的模板实参来初始化模板形参
一旦编译器确定了实际的模板实参类型就称实例化为函数模板的一个实例
函数模板调用
都是以template开始后接模板形参列表组成 模板形参列表 模板形参不能为空
typename class 一样表明后面的符号为一个类型
定义模板
表明后面的符号为类型
template<typename T>
使用嵌套依赖类型
nested depended name
多线程 多任务处理的特殊形式
多任务处理允许让电脑同时运行多个程序
多线程 task 多任务 多线程 多任务
多任务处理允许让电脑同时运行两个