流插入运算符(即重载的运算符<<)可实现流的输出。重载运算符<<是为了输出内部类型的数据项、字符中和指针值。11.9节要详细介绍如何用重载运算符<<输出用户自定义类型的数据项。
图11.3中的范例程序用一条流插入语句显示了输出的字符串。图11.4中的范例程序用多条流插入语句显示输出的字符串,该程序的运行结果与图11.3中程序的运行结果相同。
// Fig. 11.3: figll 03.cpp // Outputting a string using stream insertion. #include < iostream.h> int main() cout << "Welcome to C++!\n"; return O; }
输出结果:
Welcome to C++!
图 11.3 用一条流插入语句输出字符串
// Fig. 11.4: figllO4.cpp // Outputting a string using two stream insertions. #include < iostream.h> int main() { cout << "Welcome to "; cout << "C++!\n"; return 0; }
输出结果:
Welcome to C++!
图 11.4 用两条流插入语句输出字符串
也可以用流操纵算子endl(行结束)实现转义序列\n(换行符)的功能(见图11.5)。流操纵算子endl发送一个换行符并刷新输出缓冲区(不管输出缓冲区是否已满都把输出缓冲区中的内容立即输出)。也可以用下面的语句刷新输出缓冲区:
cout << flush;
// Fig. 11.4: figllO4.cpp // Outputting a string using two stream insertions. #include < iostream.h> int main() { cout << "Welcome to "; cout << "C++!\n"; return 0; }
输出结果:
Welcome to C++!
图 11.5 使用流操纵算子endl
流插入运算符还可以输出表达式的值(见图11.6)
// Fig. 11.6: fig11_O6.cpp // Outputting expression values. #include < iostream.h> int main() { cout << "47 plus 53 is "; // parentheses not needed; used for clarity cout << ( 47 + 53 ); // expression cout << endt; return O; }
输出结果:
47 plus 53 is 100
图 11.6 输出一个表达式的值
file:// Fig.11.7: fig11_07.cpp file:// Cascadlng the overlOadGd << OPeratOr. #includc< iostream.h> int main() { cout << "47 plus 53 is " << ( 47 + 53 ) << endl; return O; }
输出结果:
47 plus 53 is 100
图 11.7 连续使用重载运算符 <<
图中多次使用流插入运算符的语句等同于下面的语句:
((( cout << " 47 plus 53 is " ) << 47 + 53 ) << endl);
之所以可以使用这种写法,是因为重载的运算符<<返回了对其左操作数对象(即cout)的引用,因此最左边括号内的表达式:
( cout <<" 47plus 53is " )
它输出一个指定的字符串,并返回对cout的引用,因而使中间括号内的表达式解释为:
( cout << ( 47 + 53 ) )
它输出整数值100,并返回对cout的引用。于是最右边括号内的表达式解释为:
cout << endl;
它输出一个换行符,刷新cout并返回对cout的引用。最后的返回结果未被使用。
C语言式的I/O必须要提供数据类型信息。C++对此作了改进,能够自动判别数据类型。但是,C++中有时还得使用类型信息。例如,我们知道字符串是char*类型,假定需要输出其指针的值,即字符串中第一个字符的地址,但是重载运算符<<输出的只是以空(null)字符结尾的char*类型的字符串,因此使用void*类型来完成上述需求(需要输出指针变量的地址时都可以使用void*类型)。图11.8中的程序演示了如何输出char*类型的字符串及其地址,辅出的地址是用十六进制格式表示。在C++中,十六进制数以0x或0X打头,11.6.1节、11.7.4节、11.7.5节和11.7.7节要详细介绍控制数值基数的方法。
// Fig. 11.8: fig11_08.cpp // Printing the address stored in a char* variable #include < iostream.h> int main() { char *string = "test"; cout << "Value of string is: "<< string << "\nValue of static cast< void *>( string ) is:" << static_cast< void*>( string )<< endl; return 0; }
输出结果: Value of string is:test
Value of staticcast <void*>( string )is:Ox00416D50
图 11.8 输出char*类型变量的地址
用put成员函数用于输出一个字符,例如语句:
cout.put('A');
将字符A显示在屏幕上。
也可以像下面那样在一条语句中连续调用put函数:
cout.put('A').put('\n');
该语句在输出字符A后输出一个换行符。和 <<一样,上述语句中圆点运算符(.)从左向右结合,put
成员函数返回调用put的对象的引用。还可以用ASCII码值表达式调用put函数,语句cout.put(65)也