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

1 ... 210 211 212 [ 213 ] 214 215 216 ... 227


Приложение В. Ответы на вопросы и решения упражнений 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ло бы использовать для модификации вызывающего объекта.



1 ... 210 211 212 [ 213 ] 214 215 216 ... 227

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