|
Программирование >> Расширенная версия языка c++
Приложение В. Ответы на вопросы и решения упражнений 645 <cstring> using namespace output { static cha [255] ; это разделяемый ресурс static int если переменная равна буфер доступен; иначе он занят static int oindex; индекс буфера char str[80] ; int i; индекс слеющего ствола str int who; идентификатор объекта, должен быть положительна piiblic : output{int w, char *s) str, s) ; i = 0; who ; } /* Эта функция возвращает -1 при ожидании освобождения буфера, она возвращает О при завершении вывода, и она возвращает who, если буфер все еще используется int putbuf ( ) { вывод закончен inuse =0; освобождение буфера return 0; сигнал завершения } ifdinuse) inuse = who; захват буфера .... if(inuse != who) ( cout <--. Процесс who сейчас блокирован\n ; return -1; буфер использует кто-то еще if { символы еще выводятся cout Процесс who выводит символыХп ; 1++-; oindex++; outbuf [oindex] 0; последн всегда идет нуль return 1; return 0; void ShowO ( cout << outbuf \n; } char это разделяемый ресурс in :: inuse = 0; если переменная inuse равна О, буфер доступен; иначе нет int индекс буфера int main () { output old, Это проверка ), o2(2, статических переменных ); 646 Самоучитель С++ while(ol.putbuf {) bufO); ывод символов oX. show (); return 0; ; . 2. tinclude <iostreain> :. r--. finclude <new> using namespace class test I static int count; public: testO t-t-+; } .:. . - -testO {count--; } int I return count; } in : count = 0; ( .... test o3; cou unt 0 объектов существует\n ; test /* Отслеживание ошибок выделения памяти с помощью старого и нового механизмов обработки ошибок try I р = new test; выделение памяти объекту if(!p) I старый стиль cou << Обка выделения памяти\п ; return 1; d alloc ba) I новый стиль cout Опмбка выделения памятиХп ; return 1; cout cout объектов существует после выделения удаление объекта delete cout Приложение В. Ответы на вопросы ения упражнений. cou объектов существует после удаления\п ; return 0; 13.4 1. Для исправления программы просто сделайте переменную current модифицируемой, чтобы ее можно было изменить с помощью постоянной функции-члена countingO Рещение упражнения представлено ниже: Теперь программа исправлена ли)-. ... ttinclude <iostream> . . - using namespace std; . л ..->.. clas tDown { int incr; int target; * mutable int current; делаем переменную current модифицируемой public: CountDown(int delay, inti target = delay; incr = i; current = 0; const { current += incr; if(current >= target) cout << \a ; return false; cout < current return true; 1) ( int main () CountDown ob(100, 2); while (ob.countingO ) ; return 0; 2. Нет, не может. Если бы у постоянной функции-члена была возможность вызвать не постоянную функцию-член, то не постоянную функцию-член можно б1ло бы использовать для модификации вызывающего объекта.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |