本文主要是介绍读书笔记-C++PrimerPlus-8.2.6 对象、继承和引用10.2.5 修改实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C++ Prime Plus 随笔-关于显示格式的总结
8.2.6 对象、继承和引用
本例使用一个ostream的例子用来说明了基类引用可以指向派生类并可以使用基类的方法。见代码如下所示:
//filefunc.cpp -- function with ostream & parameter
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;void file_it(ostream & os, double fo, const double fe[],int n);
const int LIMIT = 5;
int main()
{ofstream fout;const char * fn = "ep-data.txt";fout.open(fn);if (!fout.is_open()){cout << "Can't open " << fn << ". Bye.\n";exit(EXIT_FAILURE);}double objective;cout << "Enter the focal length of your ""telescope objective in mm: ";cin >> objective;double eps[LIMIT];cout << "Enter the focal lengths, in mm, of " << LIMIT<< " eyepieces:\n";for (int i = 0; i < LIMIT; i++){cout << "Eyepiece #" << i + 1 << ": ";cin >> eps[i];}file_it(fout, objective, eps, LIMIT);file_it(cout, objective, eps, LIMIT);cout << "Done\n";// cin.get();// cin.get();return 0;
}void file_it(ostream & os, double fo, const double fe[],int n)
{// save initial formatting stateios_base::fmtflags initial;initial = os.setf(ios_base::fixed, ios_base::floatfield);std::streamsize sz = os.precision(0);os << "Focal length of objective: " << fo << " mm\n";os.precision(1);os.width(12);os << "f.l. eyepiece";os.width(15);os << "magnification" << endl;for (int i = 0; i < n; i++){os.width(12);os << fe[i];os.width(15);os << int (fo/fe[i] + 0.5) << endl;}// restore initial formatting stateos.setf(initial, ios_base::floatfield);os.precision(sz);
}
方法 | 设置模式 |
---|---|
setf(ios_base::fixed) | 对象设置为使用顶点表示模式 |
setf(ios_base::showpoint) | 将对象设置为小数点模式 |
precision() | 设置小数点的位数 |
width | 设置下一次输出操作的字段宽度 |
为0则表示恰好容纳显示的内容 |
应该注意的是显示的在下一次更改前一直有效。所以这里使用了一个技巧用于保存之前的调用
ios_base::fmtflags initial;initial = os.setf(ios_base::fixed);
/*代码块*/os.setf(initial);
setf()返回调用它之前有效的所有格式化设置,ios_base::fmtflags这种格式可以用来保存所需的信息类型名称。
最后要说明的是每个对象都保存了自己的格式化设置。
10.2.5 修改实现
使用
std::cout.precision(3);
可以实现用定点法表示的三位小数。
同上例可以使用
std::streamsize
类型来定义并储存之前的信息,例如
std::streamsize prec = std:cout.precision(3);
/*代码块*/
std::cout.precision(prec);
这篇关于读书笔记-C++PrimerPlus-8.2.6 对象、继承和引用10.2.5 修改实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!