C++Primer Plus --- 输入,输出和文件

1. C++ 程序一般在用户按下回车键时刷新输入缓冲区。 ios

    C++ I/O定义了一些类模板,以支持char 和 what_t 数据。使用typedef工具,C++使得这些模板char具体化到能模仿传统的非模板I/O实现。下面是相关类: c++

  • streambuf 类为缓冲区提供了内存,并提供了用于填充缓冲区,访问缓冲区内容,刷新缓冲区和管理缓冲区内存的类方法; 
  • ios_base 类表示流的通常特征,如是否可读取,是二进制流仍是文本流等;
  • ostream,istream都是从ios类派生来的,提供了输出和输入方法;
  • iostream类是基于istream和ostream类的,所以继承了输入和输出方法。

要使用这些工具,必须使用适当的类对象。例如cin cout。 数据库

2. 重载的<<操做符 函数

   << 默认含义是按位左移操做符,可是ostream类从新定义了<<操做符,方法是将其重载为输出。 工具

在这种状况下,<<叫作插入操做符,而不是左移操做符。插入操做符被重载,使之可以识别C++中多有基本类型。ostream都提供了operator<<() 函数的定义。 编码

    例如: ostream & perator<<(int) 表示函数接受一个int参数。 spa

3. write()显示整个字符串,模板原型为: 对象

   basic_ostream<charT, traits>& write(const char_type* s, streamsize n); 继承

   cout.wirite() 调用cout对象,由于write方法返回一个指向调用它的对象的引用,这里调用它的对象是cout. 索引

write方法并不会在遇到空字符时自动中止打印字符,而只是打印指定数目的字符,即便超过了字符串的边界!

    writ()方法也能够用于数值数据,能够将地址强制转换为char*,而后传递给它。

    long val = 4545121212;

    cout.write((char*) &val, sizeof(long)); 

4. 刷新缓冲区

   缓冲区被填满,程序将flush刷新缓冲区,把内容发出去,并清空缓冲区,以存储新的数据。  

   一般缓冲区为512字节或其整数倍。

   可是,在屏幕输出时,不用等到缓冲区填满,例如将换行符发送到缓冲区,将刷新缓冲区;另外输入即将发生缓冲区刷新。

   实际上,控制符也是函数。 例,能够直接调用flush()来刷新cout缓冲区; flush(cout);

5. c++ 将十六进制和八进制都视为无符号的。

6. 使用cin进行输入

   cin对象将标准输入表示为字节流。输入流的方法,跳过空白(space, enter, tab),直到遇到非空白字符。即便对于单字符模式,>>操做符将读取一个指定类型的数据。也就是说,它读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的所有内容。

7. 流状态

   设置状态

   clear() 在输入不匹配或到达文件尾时,须要使用不带参数的clear()从新打开输入。

   setstate() 为了输入和输出函数提供一种修改状态的途径。例如:setstate(eofbit)

8. get(char&) 和 get(void) 提供不跳过空白的单字符输入功能。

   cin.get(ch)指向istream对象的引用,到达文件末尾时函数返回值,转换为false

   cin.get(void)字符编码 int, 到达文件末尾时函数的返回值是EOF

9. 字符串输入:getline() get()  ignore()

   get()将换行符留在输入流中,这样接下来的输入操做首先将看到换行符;

   getline()抽取并丢弃输入流中的换行符。

10. 文件输入和输出

  字处理程序建立文件;数据库程序建立和搜索信息文件;编译器读取源代码文件并生成可执行文件。文件自己是存储在某种设备上的一系列字节。

11. 随机存取

   随机存取指的是直接移动(不是依次移动)到文件的任何位置。随机存取一般被用于数据库文件,程序维护一个独立的索引文件,该文件指出数据在主数据文件中的位置。

12. cin.get(char)成员函数调用经过返回转换为false的bool值来指出已达到EOF, 而cin.get()成员函数调用则经过返回EOF值来指出已达到EOF,EOF在文件iostream中定义的。

相关文章
相关标签/搜索