【发布时间】:2017-07-03 12:57:32
【问题描述】:
我想使用重载的 ostream
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); // 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++)
cout << m.mrx[x][z] << " ";
cout << endl;
}
return stream;
}
bool matrix::ToFile(string filename, matrix &m)
{
ofstream file;
file.open(filename.c_str());
if (file.is_open())
{
file << i << " " << j << "\n";
/*for (int x = 0; x < i; x++)
{
for (int z = 0; z < j; z++)
file << mrx[x][z] << " ";
file << "\n";
}
*/
file << &mrx;
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;
}
【问题讨论】:
-
请缩进您的代码。您正在获取矩阵的地址(使用 operator&)并将其传递给流 operatorfile << mrx。
-
你应该添加一些body函数,因为我必须添加一些空body
标签: c++ file matrix operator-overloading