C++中用list型容器存储父类和子类对象,用<<写入文件中,再用>>读出

 我来答
看不見淚痕
推荐于2016-04-07 · TA获得超过300个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:148万
展开全部

如果你想统一处理父类和子类,则可利用多态机制,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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式