Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Определение fcofiaitftifkJH0fto6<br />
no умолчанию<br />
Стоит отметить, что в C++ каждый класс должен иметь свой конструктор. Казалось<br />
бы, C++ должен генерировать сообщение об ошибке в случае, когда класс не оснащен<br />
конструктором, однако этого не происходит. Дело в том, что для обеспечения совместимости<br />
с существующим кодом С, который ничего не знает о конструкторах, C++ автоматически<br />
создает конструктор по умолчанию (так сказать, умалчиваемый конструктор<br />
по умолчанию), который инициализирует все данные-члены объекта нулями.<br />
Если ваш класс имеет конструктор, C++ не будет автоматически его создавать (как<br />
только C++ убеждается в том, что это не программа на С, он снимает с себя всю ответственность<br />
по обеспечению совместимости).<br />
Вывод: если вы определили конструктор для вашего класса и при этом хотите,<br />
чтобы класс имел конструктор по умолчанию, то должны явно определить<br />
такой конструктор сами.<br />
Приведенный ниже фрагмент демонстрирует сказанное. Этот пример вполне<br />
корректен.<br />
class Student<br />
{<br />
//...то же, что и раньше, только без конструкторов<br />
};<br />
int main(int arges, char* pArgs[])<br />
{<br />
Student noName;<br />
return 0;<br />
}<br />
Поскольку noName объявлен без аргументов, для создания этого объекта C++ вызывает<br />
конструктор по умолчанию. Однако в этом примере программист не определил никаких<br />
конструкторов для класса student и C++ сам создает конструктор по умолчанию,<br />
который просто инициализирует все данные-члены объекта нулевыми значениями.<br />
Приведенный далее пример компилятор с негодованием отвергнет.<br />
class Student<br />
{<br />
public:<br />
Student(char *pName);<br />
}};<br />
int main(int arges, char* pArgs<br />
{<br />
Student noName;<br />
return 0;<br />
To, что здесь добавлен конструктор student (char*), выглядит безобидно, но при<br />
этом заставляет C++ отказаться от автоматической генерации конструктора по умолчанию.<br />
Поэтому компиляция данного кода в GNU C++ вызовет сообщение об ошибке<br />
(оно может быть различным у разных компиляторов, но смысл его один: у класса<br />
не определен конструктор по умолчанию):<br />
Error: no matching function for call Student::Studentf)<br />
(Ошибка: не найдена функция, соответствующая<br />
вызову Student::Student())<br />
190 Часть III. "Классическое" программирование