|
Программирование >> Расширенная версия языка c++
return 0; Обратите внимание, что теперь вместо отдельной, специально вызываемой программой функции задача инициализации выполняется конструктором автоматически Э го важное положение. Если инициализация выполняется автоматически при создание екта, то это исключает любую возможность того, что по ошибке инициализации не будет выполнена. Вам, как программисту, не нужно беспокоиться об инициализации - она автоматически выполнится при появлении объекта. 2. В следующем примере показана необходимость не только конструктора, но и деструктора. В примере создается простой класс для строк, который содержит саму строку и ее длину. Когда создается объект strtype, для хранения строки выделяется память, и начальная длина строки устанавливается равной нулю. Когда объект strtype удаляется, эта память освобождается. ftinclude <iostream> ttinclude <cstring> ttinclude <cstdlib> using namespace std; ttdefine SIZE 255 class strtype { char int len; . . - public: strtype{) ; конструктор -strtype (}; деструктор void set(char *ptr); void show(); Инициализация объекта строка strtype::strtype() p = (char *) inalloc(SIZE) ; if(!p) { cou Ошибка выделения памяти\п ; exit (1) ; з2 .push(у) ; . . .sl.push{ с) ; s2.push(z); for(i=0; i<3; i++) cou сол из si: sl.popO \n ; fordO; i<3; cou сол из s2: s2.pop() \n ; strcpy(p, ptr) ; lenstrlen(p); void cout p - длина: len; cout Sn ; int main () { strtype sl,s2; si. set ( Это проверка ); s2. set ( Мке нравится С++ ) ; si.show{); s2. showO ; return 0; В этой программе для выделения и освобождения памяти используются функции maUocO и free(). Хотя этот пример совершенно правилен, как вы увидите далее в этой книге, в С++ есть и иной путь управления распределением динамической памяти. ЗамечоШй в предыдущей программе заголовочные файлы библиотечных функций языка С оформлены в соответствии с новым стилем оформления заголовков. Как уже упоминалось в главе 1, если ваш компилятор не поддерживает такие за- *р=\0; . . 1еп=0; ...... ждение памяти при удалении объекта строка strtype: :~strtype() cout Освобождение памяти по адресу р\п ; free(p) ; . ~ void strtype: : set (char*ptr} if (strlen(p) > =SIZE) { cou <>:: Строка слишком велика\п ; return; головки замените их стандартными заголовочными файлами С. То же самое можно сказать о всех программах этой книги, в которых используются библиотечные функции С. 3. В следующем примере приведен интересный способ использования конструктора и деструктора объекта. В программе объект класса tinifr предназначен для измерения временного интервала между его созданием и удалением. При вызове деструктора на экран выводится прошедшее с момента создания объекта время. Вы могли бы воспользоваться подобным объектом для измерения времени работы программы или времени работы функции внутри блока. Просто убедитесь, что объект исчезает в момент завершения временного интервала. ttinclude <iostream> ; ttinclude <Gtiiiie> using namespace std; . clas mer ( clock t start; -j. public. . . timer ( ) ; конструктор -timer ( ) ; , деструктор timer: : timer () , ,:> -. start=clock{}; ) . , . timer: :-timer() i > . clock t end; end=clock(); cou Затраченное время; (end-start)/CLOCKS PER SEC \n ; int mainO ( timer ob; char c; -,;. . Пауза ... cou Нажмите любую клавир, затем ENTER: ; cin >> с; 1 - - return 0; ... В программе используется стандартная библиотечная функция которая возвращает число временных циклов с момента запуска программы. Если разделить это число на CLOCKS PER SEC, можно получить значение в секундах.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |