《C++ Primer Plus》第十七章学习笔记
193:<<操作符,被ostream重载时,被称为插入操作符(insertion operator),而不是左移操作符。
194:>>操作符,被istream重载时,被称为抽取操作符(extraction operator),而不是右移操作符。
195:如果要输出char指针p的地址,则需要强制转换,(void*)p、(int*)p等都可以。
196:其他ostream方法:
1、ostream& put(char) ,用法:cout.put(‘A’), cout.put(65);
2、basic_ostream<charT, traits>& write(const char_type* s, streamsize n), 用法:第一个参数为要显示字符串地址,第二个参数指出要显示多少字符,即使超出了字符串边界。
197:width()方法只影响接下来显示的一个项目,然后字段宽度将恢复为默认值。默认情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符,例如cout.fill(‘*'),与width()不同,新的填充字符将一直有效,直到更改它为止。
198:precision(n)成员函数将有效数字设置为n位,与fill()类似,新的精度设置将一直有效直到被改变为止。
199:cout.setf(ios_base::showpoint) 用来打印末尾的0和小数点。
200:一个参数的setf()中的一些格式常量:
两个参数的setf()中的参数:
201:一些标准控制符:
详见:http://www.cplusplus.com/reference/iostream/manipulators/
202:
int a;
cin >> a;
若输入123Z,则将读取字符1、2、3,将Z留在输入流当中。
203:流状态:
204:设置流状态有一个非常重要的后果:流将对后面的输入或输出关闭。如果希望程序在流状态位被设置后能够读取后面的输入,就必须将流状态重置为良好,可以通过clear()方法。
205:由于历史原因,fail()方法在failbit或eofbit被设置时返回true(前者可能因为输入不匹配,后者因为到达文件尾)。
206:
207:cin.ignore(255,’\n’)将读取并丢弃接下来的255个字符或直到到达第一个换行符。它的原型为:istream& ignore(int = 1, int = EOF)。
208:
表中的get()缺了考虑读取最大字符数的情况,即:“当前的C++:如果读取了最大数目的字符,且行中还有其它字符,则不设置failbit(和getline不同)”。
209:以默认模式打开文件进行输出将自动把文件的长度截短为零,这相当于删除已有的内容。
210:较新的C++实现提供了一种更好的检查文件是否被打开的方法——is_open()。
211:
212:对于字符来说,二进制表示与文件表示是一样的,即字符的ASCII码的二进制表示。对于数字来说,二进制表示和文本表示有很大的差别,见下图:
212:二进制文件简单用法:
#include <iostream>
#include <fstream>
using namespace std;
const int size = 20;
struct planet
{
char name[size];
double pop;
double g;
};
int main()
{
ofstream fout("out.txt",ios_base::out|ios_base::binary);
planet p1 = {"Earth",60,10};
fout.write( (char*)&p1, sizeof p1);
fout.close();
ifstream fin("out.txt",ios_base::in|ios_base::binary);
planet p2;
fin.read( (char*)&p2, sizeof p2);
cout << p2.name << " " << p2.pop << " " << p2.g << endl;
fin.close();
return 0;
}
书中的错误:
P671 表格第一行少了一个”)”;
P675 表格倒数第三行的”exceptios(isostate ex)”应改为”exceptions(iostate ex)”;
P692 表格倒数4行的开头4个”ios_base::out”均错误。