程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
在C++中,数据的输入/输出格式控制主要有两种方式:输入/输出流操纵符和流格式状态标志。
采用第一种方式,就是直接使用C++提供的大量流操纵符进行输入/输出的格式控制,如设置域宽、设置精度、设置和清除格式化标志、设置域填充字符等。此方式已在第1章1.2.4小节中介绍,本小节主要介绍第二种方式。
1.格式状态标志
每个C++流都有自己的数据格式状态标志,用于反映该流的当前状态。这些状态用一个长整数表示,即ios类的数据成员x_flags。表8.2列出了流格式状态标志在类ios中被定义的枚举值,从中可以看到,数据成员x_flags的每个位表示一个状态标志设置。
表8.2 流格式状态标志
续表
2.设置流格式状态标志的成员函数
虽然无法直接对流格式状态标志进行操作,但可以使用ios类提供的公有成员函数来操作这些标志。
(1)setf()
成员函数setf()用于设置流格式状态标志。例如,设置输出流cout的showbase标志使用如下语句:
cout.setf(ios∷showbase);
设置输入流cin的skipws标志使用如下语句:
cin.setf(ios∷skipws);
注意:格式标志前的限定“ios∷”不可缺少,因为这些标志是在ios类中定义的。
在setf()中还可用位或操作符“|”将多个标志连在一起。例如:
cout.setf(ios∷scientific|ios∷showpoint);
同时设置scientific和showpoint两个标志。
(2)unsetf()
成员函数unsetf()用来清除流格式状态标志。unsetf()的用法与setf()相似。
(3)flags()
成员函数flags()用于返回流格式状态标志的当前设置。例如,以下语句返回当前cout流的ios∷scientific|ios∷showpos结果:
cout<<cout.flags(ios∷scientific|ios∷showpos)<<endl;
(4)fill()
成员函数fill()设置用于使输出域对齐的填充字符,如果不特别指定,空格即为填充字符,也可以使用流操纵符setfill达到同样的功能。例如,以下语句设置填充字符为'*'。
cout.fill('*');
3.设置流格式状态标志的操纵符
在第1章表1.4中列出的C++流操纵符,其中setiosflags用于设置流格式状态标志中指定的标志位,resetiosflags用于清除流格式状态标志中指定的标志位。例如,以下语句以十六进制输出108,结果为6C:
cout<<setiosflags(ios∷uppercase)<<hex<<108<<endl;
设置showpoint标志是为了强制输出浮点数的小数点和尾数零。若没有设置showpoint,浮点数15.0将被打印为15,否则打印为15.000000(或由当前精度指定的尾数零的个数)。
例如,以下程序用成员函数setf设置showpoint标志,从而控制了浮点数的尾数零和小数点的输出:
程序的执行结果如下:
设置ios∷showpoint标志之前:
5.5500:5.55
5.5000:5.5
5.0000:5
设置ios∷showpoint标志之后:
5.5500:5.55000(www.chuimin.cn)
5.5000:5.50000
5.0000:5.00000
采用setiosflags操纵符是等价的。
5.对齐(ios∷left、ios∷right)
left标志可以使输出域左对齐,把填充字符放在输出数据的右边;right标志可以使输出域右对齐,把填充字符放在输出数据的左边。填充的字符由fill()函数或流操纵符setfill指定。例如,以下程序用成员函数setf设置ios∷left标志,用unsetf清除ios∷left设置:
程序执行结果如下:
默认对齐
456.23
456.23
左对齐
456.23
456.23
恢复默认齐
456.23
456.23
采用setiosflags/resetiosflags操纵符是等价的。
6.整数流的基数(ios∷dec、ios∷oct、ios∷hex、ios∷showbase)
ios∷oct、ios∷hex和ios∷dec标志位分别指定把整数作为八进制、十六进制和十进制值处理。如果没有设置这些位,则流插入运算默认整数为十进制数,流读取运算按整数提供的方式处理数据(即以零打头的整数按八进制数处理,以0x或0X打头的按十六进制数处理,其他所有整数都按十进制数处理)。
设置showbase标志可强制输出整数值的基数。十进制数以通常方式输出,输出的八进制数以0打头,输出的十六进制数以0x或0X打头(由uppercase标志决定是0x还是0X)。例如,以下程序用成员函数setf设置showbase标志,并强制整数按十进制、八进制和十六进制格式输出:
程序的执行结果如下:
100
0144
0x64
采用setiosflags操纵符,等价的程序如下:
7.定点格式和科学记数法(ios∷scientific、ios∷fixed)
ios∷scientific和ios∷fixed标志用于控制浮点数的输出格式。scientific标志使浮点数按科学记数法输出,fixed标志使浮点数按照定点格式输出,即显示出小数点,小数点后边有指定的位数(由precision()函数指定)。若没有这些设置,则浮点数的值决定输出格式。例如,以下程序用成员函数setf设置定点格式和科学记数法格式,用unsetf恢复默认格式:
程序的执行结果如下:
默认格式
a=0.654321,b=6.54321e+006
科学记数法
a=6.54321e-001,b=6.543210e+006
恢复默认格式
a=0.654321,b=6.54321e+006
定点格式
a=0.654321,b=6543210.000000
采用setiosflags/resetiosflags操纵符,等价的程序如下:
有关C++程序设计基础教程的文章
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
C++中,语句默认都是顺序执行,如果碰到选择或循环语句,顺序执行的规则就要改变。C++中的选择控制语句有if语句、if...else语句、if...else if语句和sw itch语句。对于简单的if...else语句,可以使用条件运算符来代替。“语句1”、“语句2”、…使用sw itch语句应注意下列问题:◇整型表达式包括字符型或枚举型表达式。......
2023-11-07
输入流是用流提取运算符实现的。流读取运算符通常会跳过输入流中的空格、tab键、换行符等等的空白字符。该函数读取num-1个字符后结束,或者遇到分隔符separator时结束。成员函数peek返回输入流中的下一个字符,但并不将其从输入流中删除。......
2023-11-07
运算符重载函数的调用格式与普通成员函数的调用格式类似,以双目运算符重载成员函数为例,其调用格式如下:左运算对象双目运算符右运算对象例如:对于前面的Complex,设计如下主函数:其中,“s3=s1+s2;”和“s4=s1-s2;”两个语句就是调用运算符重载函数。该函数执行完毕,释放tmp对象。......
2023-11-07
C++支持三种格式的循环控制语句:while、do和for语句。图1.3while语句的执行过程编写一个程序,将用户输入的整数反向显示出来。解:程序如下:3.for语句for语句通常用于预先知道循环次数的情况,其一般形式为:for语句;其中,“初始化语句”可以是一个定义语句或表达式语句,一般用于对一组变量进行初始化或赋值。“表达式2”在每次循环执行完成后执行,一般用于改变控制循环的变量。......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。其他函数不能访问该类的保护数据成员,也不能调用该类的保护成员函数。◇一旦给出了成员访问限定符,它后面的成员都具有这个成员访问权限,直到出现另一个成员访问限定符或类声明结束为止。类的成员函数可以访问类的所有成员,没有任何限制,而类的对象对类的成员的访问是受成员访问控制符制约的。......
2023-11-07
C++的标准输入/输出流库用于数据的输入/输出,用于输入/输出的流库包含在头文件iostream.h中。表1.4常用的输入/输出流操纵符显示常数使用cout可以显示字符串和数字,并可显示多个值。因此,用户输入数据时要避免输入的数据超出指定变量的值域。程序的执行结果如下:注意:使用cin输入一个字符串时,其中不能含有空格,否则,cin认为输入结束。......
2023-11-07
相关推荐