Я готовлюсь к выпускному экзамену и наткнулся на любопытный вопрос, который был частью экзамена, который наш учитель дал в прошлом году некоторым бедным душам. Вопрос звучит примерно так:
Правильна ли следующая программа или нет? Если это так, запишите, что выводит программа. Если это не так, запишите почему.
Программа:
#include<iostream.h>
class cls
{ int x;
public: cls() { x=23; }
int get_x(){ return x; } };
int main()
{ cls *p1, *p2;
p1=new cls;
p2=(cls*)malloc(sizeof(cls));
int x=p1->get_x()+p2->get_x();
cout<<x;
return 0;
}
Моим первым инстинктом было ответить «программа неверна, так как вместо malloc
следует использовать new
». Однако после компиляции программы и просмотра ее вывода 23
я понимаю, что этот ответ может быть неправильным.
Проблема в том, что я ожидал, что p2->get_x()
вернет какое-то произвольное число (что бы ни находилось в этом месте памяти при вызове malloc
). Тем не менее, он вернул 0. Я не уверен, является ли это совпадением или члены класса инициализируются с 0, когда он malloc
-ед.
- Является ли это поведение (
p2->x
равным 0 после malloc
) по умолчанию? Должен ли я ожидается это?
- Каким будет ваш ответ на вопрос моего учителя? (кроме забыть
#include <stdlib.h>
для malloc
: P)