C++中用list型容器存储父类和子类对象,用<<写入文件中,再用>>读出
1个回答
展开全部
如果你想统一处理父类和子类,则可利用多态机制,list中存放父类指针,然后将输入输出有关的函数声明为虚函数,之后定义全局重载函数 operator<< 和 operator>> 分别调用它们即可。参考代码如下:
class Base {
public:
Base(char data = 0): _data(data) {}
virtual ~Base() {} // 虚析构函数不能省
virtual void output(ofstream &out) const { out.put(_data); }
virtual void input(ifstream &in) { _data = in.get(); }
private:
char _data;
};
class Derived: public Base {
public:
Derived(char num = 0): _num(num) {}
void output(ofstream &out) const { out.put(_num); }
void input(ifstream &in) { _num = in.get(); }
private:
char _num;
};
/* 输出到文件流 */
ofstream &operator <<(ofstream &out, const list<Base *> &ls)
{
list<Base *>::const_iterator it = ls.begin();
while(it != ls.end()) {
(*it)->output(out);
it++;
}
return out;
}
/* 从文件流读取 */
ifstream &operator >>(ifstream &in, list<Base *> &ls)
{
list<Base *>::iterator it = ls.begin();
while(it != ls.end()) {
(*it)->input(in);
it++;
}
return in;
}
使用方式如下:
int main()
{
list<Base *> ls;
ls.push_back(new Base('a'));
ls.push_back(new Derived('b'));
ofstream outfile("out.txt");
ifstream infile("in.txt");
outfile << ls;
infile >> ls;
/* 需要释放内存,在这里省略了 */
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询