1.ostream类的类方法
ostream类重新定义了 运算符,方法是将其重载为输出。在这种情况下, 叫做插入运算符,插入运算符被重载,使之能够识别c++中所有的基本类型。
原型:ostream operator (Type);
函数返回一个指向ostream对象的引用,这使得可以将输出连接起来。
put()方法原型:ostream put(char);
用于显示字符,可以用类方法表示法来调用它:
cout.put('W');
和 运算符一样,该函数也返回一个指向调用对象的引用,因此可以用它将拼接输出:
cout.put('w').put('t');
write()方法模板原型:basic_ostream charT,traits write(const char_type* s,streamsize n);
write()的第一个参数提供了要显示的字符串的地址,第二个参数指出要显示多少个字符,使用cout调用write()时,将调用char具体化,因此返回类型为ostream ,
这使得可以将输出拼接起来。
write()方法并不会在遇到空字符时自动停止打印字符,而只是打印指定数目的字符,即使超出了字符串的边界。
刷新输出缓冲区控制符flush刷新缓冲区,而控制符endl刷新缓冲区,并插入一个换行符。这两个控制符的使用方式与变量名相同:
cout "Hello" flush;
cout "world" endl;
控制符也是函数,可以直接调用flush()来刷新cout缓冲区:
flush(cout);
然而,ostream类对 运算符进行了重载,所以可用下述表达式替换函数调用:
cout flush;
因此可以用更为方便的插入表示法来成功地进行刷新。
用cout进行格式化1.修改显示时使用的计数系统
要控制整数以十进制、十六进制还是八进制显示,可以使用dec、hex和oct控制符。
例如,下面的函数调用将cout对象的计数系统格式状态设置为十六制:
hex(cout);
完成上述设置后,程序将以十六进制形式打印整数值,直到将格式状态设置为其他选项为止。
注意,控制符不是成员函数,因此不必通过对象来调用。
虽然控制符实际上是函数,但它们通常的使用方式为:
cout hex;
2.调整字段宽度
可以使用width成员函数将长度不同的数字放到宽度相同的字段中,该方法的原型为:
intwidth();
intwidth(inti);
第一种格式返回字段宽度的当前设置:第二种格式将字段宽度设置为i个空格,并返回以前的字段宽度值。这使得能够保存以前的值,以便以后恢复宽度值时使用。
width()方法只影响将显示的下一个项目,然后字段宽度将恢复默认值。
使用方法如:cout.width(5);
3.填充字符
在默认情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符。(cout输出时默认右对齐)
例如,下面的函数调用将填充字符改为星号:
cout.fill('*');
4.设置浮点数的显示精度
浮点数精度的含义取决于输出模式。有三种模式:默认模式、定点模式和科学模式。
在默认模式下,它指的是显示的总位数。在定点模式和科学模式下,精度指的是小数点后面的位数。已经知道,C+的默认精度为6位(但未尾的0将不显示)。
precision()成员函数使得能够选择其他值。例如,下面语句将cout的精度设置为2:
cout.precision(2);
和width()的情况不同,但与fill()类似,新的精度设置将一直有效,直到被重新设置。
5.打印末尾的0和小数点
ios_base类提供了一个setf()函数,能够控制多种格式化特性。这个类还定义了多个常量,可用作该函数的参数。
下面的函数调用使cout显示末尾小数点:
cout.setf(ios_base::showpoint);
使用默认的浮点格式时,上述语句还将导致末尾的0被显示出来。
6.setf()函数
setf()函数有两个原型。第一个为:
fmtflags setf(fmtflags);
其中fmtflags是bitmask类型的typedef名,用于存储格式标记。该名称是在ios_base类中定义的。
这个版本的setf()用来设置单个位控制的格式信息,参数是一个fmtflags值,指出要设置哪一位。返回值是类型为fmtflags的数字,指出所有标记以前的设置,
如果打算以后恢复原始设置,则可以保存这个值。
ios_base类定义了代表位值的常量,使用时,必须加上作用域解析运算符。
第二个setf()原型接受两个参数,并返回以前的设置:
fmtflags setf(fmtflags,fmtflags);
函数的这种重载格式用于设置由多位控制的格式选项。第一参数和以前一样,也是一个包含了所需设置的fmtflags值。第二参数指出要清除第一个参数中的哪些位。
setf(long,long)的参数调用setf()的效果可以通过unsetf()消除,后者的原型为:
void unsetf(fmtflags mask);
其中,mask是位模式,mask中所有的为都设置为1,将使得对应的位被复位。
您可能注意到了,没有专门指示浮点数默认显示模式的标记,系统的工作原理如下:仅当只有定点位被设置时使用定点表示法;仅当只有科学位被设置时使用科学表示法;
对于其他组合,如没有位被设置或两位都被设置时,将使用默认模式。因此,启用默认模式的方法之如下:
cout.setf(0,ios_base::floatfield);
第二个参数关闭这两位,而第一个参数不设置任何位。一种实现同样目标的简捷方式是,使用参数is:floatfield来调用函数unsetf():
cout.unsetf(ios_base::floatfield);
如果已知cout处于定点状态,则可以使用参数ios_base:fixed调用函数unsetf()来切换到默认模式;然而,无论cout的当前状态如何,使用参数ios_base:floatfield调用函数unsetf()
都将切换到默认模式,因此这是一种更好的选择。
7.标准控制符
如:下面的语句打开左对齐和定点模式:
cout left fixed;
8.头文件iomanip
C++在头文件iomanip中提供了其他一些控制符,三个最常用的控制符为setprecision()、setfill()、setw(),它们分别用来设置精度、填充字符和字段宽度。
setprecision()控制符接受一个指定精度的整数参数;
sefill()控制符接受一个指定填充字符的char参数;
setw()控制符接受一个指定字段宽度的整数参数。
由于它们都是控制符,因此可以用cout语句连接起来。这样,setw()控制符在显示多列值时尤其方便。