【C++】引用变量--6.对象、继承和引用(核心+难点)

举报
王博Kings 发表于 2020/12/29 23:13:00 2020/12/29
【摘要】 目录 核心概念 下述代码的核心点: 程序示例: setf()、precision()、width()使用概述  核心概念 ostream和ofstream类凸显了引用的有趣特性! ofstream对象可以使用ostream类的方法,使得文件输入、输出格式与控制台输入、输出相同! 这是继承的特性! ostream是基类,ofstream是派生类,派生类可以使...

目录

核心概念

下述代码的核心点:

程序示例:

setf()、precision()、width()使用概述


 核心概念

ostream和ofstream类凸显了引用的有趣特性!

ofstream对象可以使用ostream类的方法,使得文件输入、输出格式与控制台输入、输出相同!

这是继承的特性!

ostream是基类,ofstream是派生类,派生类可以使用基类的特性,如precision()和setf()

继承的另一个特性时:基类引用可以指向派生类对象,而无需进行强制类型转换

例如参数类型为ostream & 的函数可以接受ostream对象或者ofstream对象作为参数

下述代码的核心点:

void file_it(ostream & os, double fo, const double fe[], int n)

这里:

file_it( fout, objective, eps, LIMIT );//写入文件中!

file_it( cout, objective, eps, LIMIT );//显示到屏幕上!

程序示例:


  
  1. //function with ostream & parameter
  2. #include<iostream>
  3. #include<fstream>
  4. #include<cstdlib>
  5. using namespace std;
  6. void file_it(ostream & os, double fo, const double fe[], int n);
  7. const int LIMIT = 5;
  8. int main()
  9. {
  10. ofstream fout;
  11. const char * fn = "ep-data.txt";
  12. fout.open(fn);
  13. if (!fout.is_open())
  14. {
  15. cout << "老铁,打不开 " << fn << "。滚吧\n";
  16. exit(EXIT_FAILURE);
  17. }
  18. double objective;
  19. cout << "输入一个double的数,单位mm: ";
  20. cin >> objective;
  21. double eps[LIMIT];
  22. cout << "输入" << LIMIT << "个double\n";
  23. for (int i = 0; i < LIMIT; i++)
  24. {
  25. cout << "第 # " << i + 1 << ": ";
  26. cin >> eps[i];
  27. }
  28. file_it(fout, objective, eps, LIMIT);
  29. file_it(cout, objective, eps, LIMIT);
  30. cout << "老哥,你看OK了\n";
  31. return 0;
  32. }
  33. void file_it(ostream & os, double fo, const double fe[], int n)
  34. {
  35. ios_base::fmtflags initial;
  36. initial = os.setf(ios_base::fixed);//save initial formatting state
  37. os.precision(0);
  38. os << "Focal length of objective: " << fo << "mm\n";
  39. os.setf(ios::showpoint);
  40. os.precision(1);
  41. os.width(12);
  42. os << "f.1. eyepiece";
  43. os.width(15);
  44. os << "magnification" << endl;
  45. for (int i = 0; i < n; i++)
  46. {
  47. os.width(12);
  48. os << fe[i];
  49. os.width(15);
  50. os << int(fo / fe[i] + 0.5) << endl;
  51. }
  52. os.setf(initial);
  53. }

setf()、precision()、width()使用概述

内容8.2.6

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/91046816

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。