以前,我会将fstream对象的地址传递给执行I/O操作的任何函数,包括构造函数.但我想尝试将fstream对象作为成员变量使用,以便所有后续I/O操作都可以使用这些变量而不是将它们作为参数传递.
考虑以下Java程序:
public class A {
Scanner sc;
public A(Scanner read) {
sc = read;
}
}
Run Code Online (Sandbox Code Playgroud)
什么是C++相当于此?我试过这样做
class A {
ofstream *out;
public:
A (ofstream &output) {
out = output;
}
};
Run Code Online (Sandbox Code Playgroud)
但这给了我一个编译错误:
[错误]无效的用户定义从'std :: ofstream {aka std :: basic_ofstream}'转换为'std :: ofstream*{aka std :: basic_ofstream*}'[-fpermissive]
我建议使用引用类型作为类的成员变量.
class A {
ofstream& out;
public:
A (ofstream &output) : out(output) {}
};
Run Code Online (Sandbox Code Playgroud)
它比使用指针更干净.
如果您希望类型的对象A从流中读取数据(如名称Scanner所示),请使用std::istream.
class A {
std::istream& in;
public:
A (std::istream &input) : in(input) {}
};
Run Code Online (Sandbox Code Playgroud)