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

1 ... 129 130 131 [ 132 ] 133 134 135 ... 227


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;



1 ... 129 130 131 [ 132 ] 133 134 135 ... 227

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