c ++将成员函数的输出写入文本文件

时间:2018-10-06 02:47:48

标签: c++ file-io operator-overloading member-functions

我正在尝试将类的成员函数的输出写入文本文件。我似乎无法让我的输出重载运算符表现出我所希望的行为。我天真地在行中使用了无法识别的参数

 outStream << myClass.myMemberFunction(x1, x2, results)

因为在没有更改myMemberFunction的任何内容的情况下,我仍然找不到任何有效的方法。

这是一个例子:

头文件

proper include guards


class myClass {

public:

bool myMemberFunction( int& x1, int& x2, std::vector<int> results);


friend ostream &operator<< (ostream& out, myClass& Class)


};

然后进入

classDef源文件

proper include files

using namespace std;
using std::vector;

bool myClass::myMemberFunction(int& x1, int& x2, vector<int> results) {

int x3;
x3 = x1 + x2;
results.push_back(x3);

return true;
};

myClass& operator<< (ostream& out, myClass& myClass) {

ofstream outStream;

outStream.open("emptyFile.txt", ios::app);

if (outStream.is_open()) {
    outStream << myClass.myMemberFunction(x1, x2, results);

这里重要的一点是我想输出存储在结果向量中的值

    outStream.close();
}
else throw "Unable to open file";
}

是否有任何方法可以在不更改myMemberFunction的情况下进行操作?

1 个答案:

答案 0 :(得分:0)

ofstream& operator<< (ofstream& out, const myClass& instance) {
    std::vector<int> results;
    instance.myMemberFunction(x1, x2, results); // x1 and x2 need to be defined
    for(int i : results) {
       out << i;
    }
    return out;
}

您需要在其他位置创建文件等

myClass classObject; // Some instance of myClass you want to output
ofstream outStream;

outStream.open("emptyFile.txt", ios::app);

if (outStream.is_open()) {
    outStream << classObject; // You can output an instance of your class now
    outStream.close();
}
else throw "Unable to open file";

您还需要更新头文件中的operator<<声明以返回ostream&而不是myClass&。 您确切要做的就是为您的类重载流运算符。因此,当您将其与流一起使用时,将调用此方法,并且您的实现将确定当您要输出类的实例时流将发生什么情况。因此,您不应该在此处打开文件。只需将成员函数的返回值输出到流中并返回即可。

编辑:您还必须更改成员函数的签名,以通过引用传递矢量(否则,请填充副本)。不需要通过引用传递int。