Другие языки программирования и технологии

Инициализация массива указателей на объекты.

Здравствуйте! Подскажите пожалуйста, как инициализировать массив указателей на объекты? Я делаю так:
baseClass *pmas[2];
pmas[0] = new derivedClassA(2,3);
pmas[1] = new derivedClassB(5,6);
Затем пишу cin >> *pmas[0]; но заполняются только поля базового класса и программа прекращается, а а поля наследников нет.
> Затем пишу cin >> *pmas[0];
Ни хрена не понятно из твоего вопроса. Ты оператор >> перегрузил?

#include <iostream>

class A {
    int a;
public:
    A(): a(0) { }
    virtual void input(std::istream &i) { i >> a; };
    virtual void print(std::ostream &o) { o << "a: " << a; }
};

class B: public A {
    int b;
public:
    B(): b(0) { }
    void input(std::istream &i) { A::input(i); i >> b; };
    void print(std::ostream &o) { A::print(o); o << "; b: " << b; }
};

class C: public B {
    int c;
public:
    C(): c(0) { }
    void input(std::istream &i) { B::input(i); i >> c; };
    void print(std::ostream &o) { B::print(o); o << "; c: " << c; }
};

std::istream &operator>>(std::istream &i, A &a) { a.input(i); return i; }
std::ostream &operator<<(std::ostream &o, A &a) { a.print(o); return o; }

int main() {
    A *m[3];
    m[0] = new A();
    m[1] = new B();
    m[2] = new C();
    for (int c = 0; c < 3; ++c) std::cin >> *m[c];
    for (int c = 0; c < 3; ++c) std::cout << "m[" << c << "]: " << *m[c] << std::endl;
}

Рауанбек Есмуратов
Рауанбек Есмуратов
67 987
Лучший ответ