如何在指向基类的指针上执行I / O操作?

时间:2013-09-13 03:12:00

标签: c++ io

例如,我有一个基类A及其派生类BC,依此类推。我的数据指针指向A。它可能是new Bnew C,依此类推。是否有简单的方法来编写和读取流的指针?我的问题是如何了解具体类型。一个显示我的意思的例子。

struct A            { int i; };
struct B : public A { char c; };
struct C : public A { float f; }

struct Data
{
    unique_ptr<A> mA;
};

Data data;

用户在data上工作,然后写出文件并从文件中读入。

1 个答案:

答案 0 :(得分:1)

答案是,你没有使用虚拟功能。

#include <iostream>

struct A {
    int i;
    virtual void describe() {
        std::cout << "A:" << i << std::endl;
    }
};
struct B : public A {
    char c;
    virtual void describe() override {
        // Assume a 'B' wants to also output the A stuff.
        std::cout << "B:" << c << ":";
        A::describe();
    }
};
struct C : public B {
    float f;
    virtual void describe() override {
        // Assume a 'C' wants to also output the B stuff and A stuff.
        std::cout << "C:" << f << ":";
        B::describe();
    }
};

#include <vector>

int main() {
    std::vector<A*> bar;
    A a;
    a.i = 10;
    B b;
    b.i = 22;
    b.c = 'b';
    C c;
    c.i = 5;
    c.c = 'X';
    c.f = 123.456;
    bar.push_back(&a);
    bar.push_back(&b);
    bar.push_back(&c);
    for (size_t i = 0; i < bar.size(); ++i) {
        bar[i]->describe();
    }
}

http://ideone.com/12BEce