尝试实现我自己的<<并>>流式处理运算符在我的 Grid 对象上运行



我的任务是重载我自己的"<<"one_answers">>"流运算符,以便从我的网格中读取值并将值写入到我的网格。我不知道如何用我的SaveGrid和LoadGrid实现这一点。我已经阅读了许多关于重载运算符的教程,这就是我到目前为止所得到的。

我已经实现了类中的友元,但我不确定如何在我的grid.cpp中实现它们

friend ostream& operator<<(ostream& out, Grid& grid);
friend istream& operator>>(istream& in, Grid& grid);

寻找一些关于我如何实现这一点的建议,这样我就可以使用我的重载运算符和cout<lt;grid和cin>>grid,我很抱歉我没有很好地阐述这一点,但我们非常感谢任何建议。

网格.cpp

#include "Grid.h"
#include<iostream>
#include<fstream>
using namespace std;
void Grid::LoadGrid(const char filename[])
{
ifstream newStream;
newStream.open(filename);
for (int y = 0; y < 9; y++)
{
for (int x = 0; x < 9; x++)
{
newStream >> m_grid[y][x];
}
}

}

void Grid::SaveGrid(const char filename[]) 
{
ofstream newStreamOut(filename);
for (int y = 0; y < 9; y++)
{
for (int x = 0; x < 9; x++)
{
newStreamOut << m_grid[y][x] << " ";
}
newStreamOut << endl;
}

} 

ostream& operator<<(ostream& out, Grid& grid)
{
grid.SaveGrid(out);
return out;
}
istream& operator>>(istream& in, Grid& grid)
{
grid.LoadGrid(in);
return in;
}

网格.h

#pragma once
#include<ostream>
using namespace std;
class Grid
{
public:
Grid() {};
~Grid(){};
friend ostream& operator<<(ostream& out, Grid& grid);
friend istream& operator>>(istream& in, Grid& grid);
void LoadGrid(const char filename[]);
void SaveGrid(const char filename[]); 

private:
int m_grid[9][9];
};

main.cpp

#include <iostream>
#include "Grid.h"
using namespace std;
int main(int args, char** argv)
{
Grid grid;
grid.LoadGrid("Grid1.txt");
grid.SaveGrid("OutGrid.txt");
system("pause");
}

将逻辑从LoadGridSaveGrid函数(所有在打开的文件流上操作的东西(移动到>><<函数中。同时为不应该更改的对象添加const

ostream& operator<<(ostream& out, const Grid& grid)  // grid should be const
{
for (int y = 0; y < 9; y++)
{
for (int x = 0; x < 9; x++)
{
out << grid.m_grid[y][x] << " ";
}
out << endl;
}
return out;
}

那么,LoadGridSaveGrid函数只是调用流运算符的助手,但负责打开文件流。

void Grid::SaveGrid(const char filename[]) const   // *this should be const
{
ofstream newStreamOut(filename);
newStreamOut << *this;
}

除了现在你可以将你的Grid输出到你想要的任何其他ostream

std::cout << my_grid << "n";

然后,对istream侧执行相同操作。

最新更新