你是否正在寻找关于ostream的内容?让我把最宝贵的东西奉献给你:
重载的<<操作符
ostream类重新定义了<< 操作符。这时应叫作 插入(insertion)操作符
。
插入操作符被重载,使之能够识别C++中所有的基本类型:
unsigned char signed char
char short
unsigned short int
unsigned int long
unsigned long float
double long double
ostream类还为下面的指针类型定义了插入操作符函数:
const signed char * const unsigned char *
const char * void *
重载的operator<<()函数返回一个指向ostream对象的引用,这使得可以将输出连接起来。
其他ostream方法
put()
方法,用于显示字符。最初原型如下:
ostream & put(char);
当前标准与此相同,但被模板化,以适用于wchar_t 。
用类方法表示法来调用:
cout.put('w');
// display the w character
该方法也返回一个指向调用对象的引用,因此可以用它来拼接输出:
cout.put('i').put('t');
// display "it" with two put()calls
在原型合适的情况下,可以将数值型参数用于put(),让函数原型自动将参数转换为正确的char值。例如:
cout.put(65);
// display the A character
cout.put(66.3);
// display the B character
第二条语句将double值66.3转换为char值66,并显示ASCII码对应的字符。
write()
方法,用于显示整个字符串,其模板原型如下:
basic_ostream<charT, traits> & write (const char_type * s, streamsize n);
write()的第一个参数提供了要显示的字符串的地址,第二个参数指出要显示多少个字符。
使用cout调用write()时,将调用char具体化,因此返回类型为ostream & 。
该方法并不会在遇到空字符时停止打印字符,而是打印指定数目的字符,即使超出了字符串的边界。
write()方法也可用于数值数据,只需将数字的地址强制转换为char * ,然后传递给它:
long val = 560031841;
cout.write( (char *) &val, sizeof(long));
这不会将数字转换为相应的字符,而是传输内存中存储的位表示。
4字节的long值将作为4个独立的字节被传输。输出设备将把每个字节作为ASCII码进行解释。因此560031841将被显示为4个字符的组合。
刷新输出缓冲区
除了将换行符发送到缓冲区,会刷新缓冲区以外。在输入即将发生时也会刷新缓冲区。例如:
cout << "Enter a number: ";
float num;
cin >> num;
程序期待输入这一事实,将导致它立刻显示cout消息,即使输出字符串中没有换行符。
另外,可以使用控制符flush
刷新缓冲区,或控制符endl
刷新缓冲区,并插入一个换行符:
cout << "Hello, good-looking! " << flush;
cout << "Wait just a moment, please. " << endl;
事实上,控制符也是函数。例如,可以直接调用flush()来刷新cout缓冲区:
flush(cout);
由于ostream类对<< 插入操作符进行了重载,使得表达式:
cout << flush
将被替换为函数调用flush(cout)。
cout格式化
1. 修改显示时使用的计数系统
要控制整数以十进制、十六进制还是八进制显示,可以使用dec、hex、oct
控制符,它们都在std名称空间中。
例如,下面的函数调用:
hex(cout);
将cout对象的计数系统格式状态设置为十六进制,直到将格式状态设置为其他选项为止。
控制符不是成员函数,不必通过对象来调用。通常的使用方式为:
cout << hex;
2. 调整字段宽度
width()
成员函数将长度不同的数字放到宽度相同的字段中,原型为:
int width();
int width(int i);
第一种格式返回字段宽度的当前值。
第二种格式将字段宽度设置为i个空格,并返回以前的字段宽度值。
width()方法只影响将显示的下一个项目,然后字段宽度将恢复为默认值。
例如,下面的语句:
cout << '#';
cout.width(12);
// 由于width()是成员函数,因此必须使用对象来调用它
cout << 12 << "#" << 24 << "#/n";
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-7296-1.html
美国人那点手段不得人心
我爷爷一月2300
芝麻粉本身就是熟了的
0