Программирование >>  Расширенная версия языка c++ 

1 ... 11 12 13 [ 14 ] 15 16 17 ... 227


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, можно получить значение в секундах.



1 ... 11 12 13 [ 14 ] 15 16 17 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика