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