![]() |
|
Программирование >> Расширенная версия языка c++
Qb.seti(1900); cout return 0; Данная программа не буде шроваться, поскольку ия-член seti() объявлена постоянной, что означает невозможность изменения вызывающего ее объекта. Таким образом, попытка изменения функцией переменной i ведет к ошибке. С другой стороны, поскольку функция geti() не меняет переменной i, она совершенно правильна. 2. Чтобы допустить изменение избранных членов класса постоянной функцией-членом, они задаются модифицируемыми. Ниже представлен пример. Пример задания модифицируемого члена класса finclude <1ойсгеат> using namespace std; - У! . - class Demo { mutable int i; . . . . . .J;.m: public: int const { return i; здесь все правильно voi (1г x) const { ,. i = x; теперь все правильно /* Пример объявления постоянные й-членов. Данная программа содержит опшбку и компилироваться не Судет #include <iostreain> г... , . . г-.т using namespace std; i р-. -- ., . ,\ class Demo { -Z int i; - r- - : ;- c-. /J.-io-l . public: -л . -.i.- in 0 const ( return i; здесь все правильно :;,л .уу. voittntx) const { ... i = x; Ошибка! ! ! . Demo return 0; ![]() Здесь переменная i задана модифицируемой, поэтому ее может изменить фуньщия-член seti(). Тем не менее, поскольку переменная j по-прежнему остается не модифицируемой, постоянная функция-член seti() не может изменить ее значение. В следующей программе сделана попытка создать простой таймер для измерения временных интервалов. По истечении каждого такого интервала тай- . мер должен подавать звуковой сигнал. К сожалению, в том виде, в котором программа представлена, она компилироваться не будет. Найдите и исправьте ошибку. В этой программе имеется ошибка #include <iostream> using namespace std; - clas tDown { int incr; int target; int current; piiblic: CoiintDown (int delay, int i - 1) { target = delay; incr = i; current = 0; bool counting() const { current += incr; /* Если убрать нтарии вокруг этой функции, то программа компилироваться не Судет void setj (int x) const { j = x; здесь прежняя ошибка */ }; int main () Demo ob; ob.seti(1900); cout ob.getiO ; { CountDown ob(100, 2); i .. - lit while(ob.counting()); return 0; 2. Может ли постоянная функция-член вызвать непостоянную функцию? Если нет, то почему? 13.5. Заключительный обзор конструкторов Хотя тема конструкторов в этой книге уже обсуждалась, некоторые аспекты их применения остались нераскрытыми. Рассмотрим следующую программу: ♦ include <iostreairt> using namespace class myclass { int a; public: myclass(int x) { a = x; } int { return a; ) int i myclass ob(4) ; cout return 0; if (current >= target) { . , cout Va ; . . *> return false; c, .. . . cout current ; return true;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |