文件IO
=====================================================
1.涉及到的类
#include
ifstream --》读取文件
ofstream --》写入文件
2.读取文件
第一步:定义ifstream类的对象
ifstream (const char* filename, ios_base::openmode mode = ios_base::in);
参数:filename --》文件路径名
mode --》权限 ios_base::in 可读
ios_base::out 可写
第二步:打开文件,如果文件不存在,打开会失败
void open(const char* filename,ios_base::openmode mode = ios_base::in);
第三步:读取文件
get() //一次读取一个字符
int get();
read() //读取指定数量的字符
istream& read (char* s, streamsize n);
参数:s --》存放读取的内容
n --》你打算读取多少字节数据
getline() //一次最多只能读取一行内容,类似于fgets()
istream& getline (char* s, streamsize n);
istream& getline (char* s, streamsize n, char delim);
参数:delim --》默认情况下getline遇到n结束读取
这个参数可以指定getline遇到特定字符结束读取
第四步:关闭文件
void close();
3.写入文件
第一步:定义ofstream类的对象
ofstream (const char* filename, ios_base::openmode mode = ios_base::out);
第二步:打开文件,如果文件不存在,可以新建
void open(const char* filename, ios_base::openmode mode = ios_base::out);
第三步:写入文件
ostream& write (const char* s, streamsize n);
第四步:关闭文件
void close();
类型转换
=====================================================
1.C语言只有一种粗暴的转换方式---》强制类型转换
2.C++新增四种常见的类型转换方式
以下四种类型转换,都是模板函数
第一种:dynamic_cast //用于父类指针指向子类对象的转换(多态)(本来可以自动转换,不需要使用这个函数,但是规范写法还是写上)
父类 *p=dynamic_cast<父类 *>(子类指针);
第二种:const_cast //用于把一个const修改的指针,赋值给一个非const修饰的指针
People people1;
const People *p=&people1;
//People *q=p; 编译语法错误
People *q=const_cast
第三种:static_cast //子类指针指向父类的转换
static_cast<类型1>(类型2)
第四种:reinterpret_cast //强制转换
智能指针
=====================================================
1.概念
为了解决堆空间自动释放这个问题,发明了智能指针
实际开发中总有程序员忘记释放堆空间
2.智能指针的原理
所谓的智能指针,本质上是个模板类
使用智能指针,只需要创建模板类的对象即可(对象创建自动调用构造--》分配的堆空间 对象释放自动调用析构--》释放堆空间)
程序员就不必烦恼堆空间的申请和释放问题
template
class xxxx //模板类--》可以匹配任何合法类型
{
public:
构造函数
{
给指针分配堆空间
}
析构函数
{
给指针释放堆空间
}
private:
T *指针;
};
xxxx
3.常见的智能指针
C++11之前:
auto_ptr --》智能指针(模板类的名字)
C++11以后:
unique_ptr --》智能指针(模板类的名字)
头文件 #include
公式: unique_ptr<模板类型> 对象();
例如: unique_ptr
*p=666;
unique_ptr
p[0]=15;
p[1]=56;
p[2]=89;
注意:如果是申请一个int大小,使用的使用采用解引用
如果是申请多个int大小,使用的使用采用中括号



