我使用的几个函数使用相同的输入和输出文件,我需要找到一种方法来全局化它们,这样我就可以使用这些函数,而无需在每次调用函数时在函数内部声明它们至杯状
void func1()
{
ifstream infile;
ofstream outfile;
infile.open(" input.txt");
outfile.open("output.txt");
......}
void func2()
{
ifstream infile;
ofstream outfile;
infile.open(" input.txt");
outfile.open("output.txt");
......}
我只需要在每个函数中使用一次声明文件,而不是每次都使用,我该怎么做?
您可以将这些函数放在saperate类中。您将要做的是在您想要调用函数的任何位置创建类的对象。这被称为可重用
使用namespace
声明文件:
//files.h
namespace FILES
{
extern ifstream infile;
extern ofstream outfile;
}
并在.cpp文件中定义这些文件对象
//files.cpp
ifstream FILES::infile ("input.txt");
ofstream FILES::outfile ("output.txt");
用法:
void func1 ()
{
//use FILES::infile and FILES::outfile
}
void func2 ()
{
using namespace FILES; // to avoid writing FILES:: always
//use infile and outfile
}
我不知道我能理解这个问题多少,但看看解决方案。希望这能对你有所帮助。
在.cpp/.h文件中定义函数,您可以通过编写以下行在任何需要的地方使用该函数:
extern void func1();extern void func2();
如果您不想使用上面提到的名称空间。但是上面的答案是好的。
您在两个函数之间复制的资源类型多达三种:文件名;文件流和文件本身的内容。减少这种重复并在各职能部门共享这些资源的最佳方式实际上取决于您对流的处理。
无论如何,我不相信你需要将数据全球化。最好将您认为将在两个函数之间共享的任何内容作为参数传递:
void func1(ifstream & infile, ofstream & outfile)
{
......
}
void func2(ifstream & infile, ofstream & outfile)
{
......
}
int main()
{
ifstream infile;
ofstream outfile;
infile.open(" input.txt");
outfile.open("output.txt");
func1(infile, outfile);
func2(infile, outfile);
return 0;
}
既然main
函数负责命名、声明和打开文件,那么子函数就可以专注于它们的实际任务了。此外,您可以使用"input.txt"one_answers"output.txt"以外的文件调用func1
和func2
,而无需对函数本身进行编辑。让对象存在于函数范围内(而不是全局范围内)也可以更容易地跟踪正在发生的事情,因为它更清楚哪些代码在处理哪些数据。
(请注意,由于流的生存期跨越func1
和func2
,您在其中一个中对它们所做的事情将对另一个中产生影响。特别是,流的查找位置将持续存在。如果您在每个子函数中重新打开它们,或者通过省略&
来传入流的副本,则情况就不会如此。)