注意:
ofstream类是由ostream基类派生而来的,其可以使用基类的格式化方法setf()和precisoin();
以下都用ofstream对象fout进行说明:
打开文件:fout.open(指向文件的指针)
判断文件是否成功打开:fout.is_open() 该返回值为布尔类型
案例代码:
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
void file_he(ostream& os, double fo, const double fe[], int n);
const int LIMIT = 5;
int main() {
ofstream fout;
const char* fn = "数据文件.txt";
fout.open(fn);//打开该文件
if (!fout.is_open()) {
cout << "不能打开文件" << fn << endl;
exit(EXIT_FAILURE);
}
double objective;
cout << "请输入需要放大的倍数:";
cin >> objective;
double eps[LIMIT];
cout<<"请输入"<<LIMIT<<"个目镜倍数\n";
for (int i = 0; i < LIMIT; ++i) {
cout << "目镜" << i + 1 << ":";
cin >> eps[i];
}
file_he(fout, objective, eps, LIMIT);//fout是派生类对象
file_he(cout, objective, eps, LIMIT);//cout是基类对象
cout << "结束\n";
return 0;
}
void file_he(ostream& os, double fo, const double fe[], int n) {
ios_base::fmtflags initial;//将此时的设置状态存储到initial中
initial = os.setf(ios_base::fixed);
os.precision(0);//格式化
os << "物镜倍数: " << fo << " mm\n";
os.setf(ios::showpoint);//设置为显示小数点模式,使得小数部分为0
os.precision(1);//设置显示小数点位数
os.width(12);//设置下一次输出操作使用的字段宽度
os << "f.l.目镜";
os.width(15);
os << "放大" << 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;
}
os.setf(initial);//便于恢复到最初的输出设置状态
}
运行结果:
什么时候使用引用?
面对数据对象为数组,则用指针即可
面对数据对象为结构体,则使用指针或引用
面对数据对象为类对象,则使用引用即可