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

0

Я хочу инициализировать массив. Там нет ошибки компиляции, но когда я запускаю программу, она показывает первый 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
    Вы имеете в виду, что он печатает «введите идентификатор», а затем после ввода идентификатора он не продолжается?
  • 1
    Все указатели в a неинициализируются, когда вы инициализируете a2 с ними.
Показать ещё 6 комментариев
Теги:
class
object
arrays

1 ответ

1
Лучший ответ

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

  • 0
    Я использую динамическое распределение из-за phone_number, я не смог бы достичь его без динамического распределения!
  • 2
    @RaiOu Похоже, вы используете динамическое размещение, потому что вы не знаете, как использовать стандартные контейнеры библиотеки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню