1.C++中 父类为基类base class,继承类为 派生类derived class。
2.IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream 定义读写已命名文件的类型,sstream定义的类型用于读写存储在内存中的string对象。
3.
4.若函数有基类类型的引用形参时,可以给函数传递其派生类型的对象。
5.流类 所读写的是由 char类型组成的流。
6.标准库类型不允许做复制 或赋值操作。1).不能存储在vector容器中。因为只有支持复制的元素类型可以存储在vector或其他容器类型里 2).形参或返回类型 也不能为流类型。如果需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。
7.对IO对象的读写会改变它的状态,因此引用必须是非const的。
8.
9.if( cin )直接检查流状态; while ( cin>>word ) 检测条件表达式返回的流。
10.所有流对象都包含一个条件状态成员,该成员由setstate和clear操作管理。setstate和clear操作用于改变条件成员的状态。
clear操作将条件重设为有效状态。setstate操作可打开某个指定的条件,用于表示某个问题的发生,除了添加的标记状态,会保留其他已存在的状态变量不变。
11.每个IO类定义了三个iostate类型的常量值,分别表示特定的位模式。badbit 、failbit 、eofbit
12.rdstate成员函数返回一个iostate类型的值,该值对应于流当前的整个条件状态。
13.缓冲区内容被刷新:1).程序正常结束 2).缓冲区可能满时,写下一个值之前刷新 3).用操纵符显示刷新,比如endl
4).每次输出操作执行完,用unitbuf操纵符设置流的内部状态,从而清空缓冲区
5).将输出流与输入流关联tie起来,在读输入时将刷新其关联的输出缓冲区;可用istream或ostream对象调用,使用一个指向ostream对象的指针形参。
一个ostream对象每次只能与一个istream对象绑在一起。若在调用tie函数时传递实参0,则打破捆绑。cin.tie(&cout);cin.tie(0);
14.操作符:endl 输出换行符并刷新缓冲区;ends插入空字符null并刷新缓冲区;flush不添加任何字符 刷新流。
15.unitbuf刷新所有输出,nounitbuf操作符将流恢复为使用正常的、由系统管理的缓冲区刷新方式。
16.文件流对象使用:调用open成员函数将已存在的fstream对象与特定文件绑定。
17.打开文件后,通常要检验打开是否成功。
if( !infile )
{
cerr<<"error"<<ifile<<endl;
return -1;
}
18.如果要把fstream对象与另一个不同的文件关联,则必须先关闭现在的文件,然后再打开另一个文件。
ifstream infile("in");
infile.close;
infile.open("next");
19.若打算重用已存在的流对象,那么while循环必须在每次循环时记得关闭close和清空clear文件流。
20.如果需要重用文件流读写多个文件,必须在读另一个文件之前调用clear清除该流的状态。
21.
out、app、trunc模式只能用于指定与ofstream或fstream对象关联的文件;in模式只与ifstream或fstream对象关联的文件。
默认时,ifstream以in模式打开做读操作;ofstream以out模式打开可写。以out模式打开的文件会被清空,丢弃该文件存储的所有数据(等效为ofstream对象同时指定out与trunc);fstream对象同时以in和out模式打开。
22.对于用ofstream打开的文件,要保存文件中已存在的数据,唯一的方法是显示的指定app模式打开。 ofstream appfile("file2",ofstream::app);
23.fstream对象以in和out模式同时打开时不清空。
24.模式是文件的属性而不是流的属性。
25.只要调用open函数,就要设置文件模式,可以显示也可以隐式。若没有指定,则用默认。
26.有效的模式组合极其含义:
以上组合都可以添加ate模式以改变文件打开时的初始定位,定位于文件末尾处。
27.一个打开并检查输入文件的程序
ifstream& open_file(ifstream &in,const sring & file)
{
in.close();
in.clear();
in.open(file.c_str());
return in;
}
&:返回一个打开的文件对象的引用。如果不用引用,那么返回的就是一个拷贝。对拷贝的操作不会影响实际的对象。
28.sstream定义了一个有string形参的构造函数,将string类型的实参复制给stringstream对象。对stringstream的读写操作实际上读写的就是该对象中的string对象。
还定义了str的成员,用来读取或设置stringstream对象所操纵的string值。
29.stringstream对象不能使用open和close函数,而fstream对象则不允许使用str。
30.处理每行极其每个单词:
string line,word;
while(getline(cin,line))
{
istringstream stream (line);//绑定stream to line
while(stream>>word) //从line中读取单词
{
}
}
31.使用输入操作符读string时,空白符将会忽略。
32.派生类对象可当作基类对象使用。