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

Я хочу инициализировать массив. Там нет ошибки компиляции, но когда я запускаю программу, она показывает первый cout тогда прекрати бегать.

Вот мой код:

class A {
string first_name ;
string last_name;
int ID;
public:
virtual void print ()=0;
};

class B :public A{
string phone_number;

.......
void print(){
........
}
};

class D{
A** a;
int size;
public:
D(){
size = 10;
a = new A *[size];
for(int i = 0 ; i<size ; i++){
a[i] = NULL;
}
}

void Add(){
for(int i = 0 ; i<size ; i++){
A * a2 = a[i];
B * b  = dynamic_cast<B*>(a2);
int id;
cout<<"enter the id";
cin>>id
b->set_ID(id);
// i did the same (cout , cin statements) for the first name and last name.
b->set_first_name();
b->last_name();
}
};

Это не правильно?

0

Решение

Вы выделяете size количество A*с, но вы на самом деле не указывать эти указатели нигде. Они неинициализированы. Изменить: теперь вы просто устанавливаете их в NULL. Вы должны были бы выделить некоторые A объекты и назначить их адреса каждому из элементов a, Однако я не вижу веской причины для динамического выделения массива указателей — почему бы вам просто не объявить a как A* a[10];? (или еще лучше, используйте std::vector или же std::array)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]