Здравствуйте! Подскажите пожалуйста, как инициализировать массив указателей на объекты? Я делаю так:
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;
}

Ни хрена не понятно из твоего вопроса. Ты оператор >> перегрузил?
#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;
}

Похожие вопросы
- Инициализация массива. Указатели.
- Проблема с инициализацией массива объектов.
- Массив указателей в C++
- Задача - описать класс "Массив" с параметрами: длина массива, указатель на первый элемент массива
- Инициализация массива символьного типа. С++
- Как создать массив указателей на числа? (язык Си)
- Вопрос по указателям и массива С++
- Помогите с программой Одномерные массивы и указатели
- инициализация объекта в php?
- 2 массива. Найти масимальную подпоследовательность с помощью указателей