0

例如,我有一个基类A和它的派生类BC等等。我有一个指针指向的数据A。可能是new B, new 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,然后写出文件并从文件中读取。

4

1 回答 1

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

于 2013-09-13T05:12:12.620 回答