重载ostream运算符以在文件中写入矩阵

时间:2017-07-03 12:57:32

标签: c++ file matrix operator-overloading

我想使用我的重载ostream<<将我的矩阵写入文件运营商。有一个打印矩阵的功能。现在我想用这个函数在我的文件中写入矩阵。但我把我的矩阵的地址写入文件,我知道为什么,但我怎么能把矩阵写入文件?

ProgressBar

2 个答案:

答案 0 :(得分:0)

这是因为您使用file << &mrx写了mrx的地址。这是指向指向int的指针的指针。您实际上并未编写matrix对象m

file << m;

答案 1 :(得分:0)

你不应该通过引用给mrx,代码工作并在文件中保存矩阵,但你必须记住,该函数应该有一些正文(因为你在代码中没有正文)

您的operator<<效果不佳,他应该将数据保存到std::ostream stream您必须std::cout,现在工作正常。

#include <iostream>
#include <fstream>
using namespace std;
class matrix
{
private:
    int i;
    int j;
    int ** mrx;

public:
    matrix(); // Konstruktor I
    matrix(int a, int b); // Konstruktor II
    ~matrix(); // Destruktor
    void fill_data() {}; // fill matrix
    void print(){}; // print matrix
    bool ToFile(string filename, matrix &m); // MY PROBLEM!!!
    bool FromFile(string filename) { return 0; }; // reading from file
    friend ostream & operator << (ostream &stream, matrix & m);
};

matrix::matrix()
{
    i = j = 0;
    mrx = NULL;
}

matrix::matrix(int a, int b) //1
{
    i = a;
    j = b;

    mrx = new int *[i];

    for (int x = 0; x < i; x++)
        mrx[x] = new int[j];

    for (int x = 0; x < i; x++)
        for (int z = 0; z < j; z++)
            mrx[x][z] = 0;
}


matrix::~matrix()
{
    for (int x = 0; x < i; x++)
        delete[] mrx[x];
    delete[] mrx;
    mrx = NULL;
}


ostream& operator << (ostream& stream, matrix &m)
{
    for (int x = 0; x < m.i; x++) {
        for (int z = 0; z < m.j; z++)
            stream << m.mrx[x][z] << " ";
        stream << endl;
    }
    return stream;
}

bool matrix::ToFile(string filename, matrix &m)
{
    ofstream file;
    file.open(filename);

    if (file.is_open())
    {
        file << i << " " << j << "\n"; 
        file << m;

        file.close();

        return true;
    }
    else
    {
        cout << "Failed" << endl;

        return false;
    }
}

int main()
{
    matrix A(4, 4);

    A.print();
    A.fill_data();
    cout << "_____________ Matrix A ______________" << endl;
    A.print();
    cout << "_____________________________________" << endl;
    cout << endl;


    A.ToFile("testfile.txt", A);


    matrix C(6, 6);

    C.FromFile("testfile.txt");


    C.print();
    cout << A << endl << endl << C;
    return 0;
}