ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн
Значения, возвращаемые операцией
Функция operator++() программы COUNTPP1 имеет небольшой дефект. Вы можете его выявить, если используете в функции main() строку, похожую на эту:
c1 = ++c2;
Компилятор будет протестовать. Почему? Просто потому, что мы определи- ли тип void для возвращаемого значения функции operator++(). А в нашем выра- жении присваивания будет запрошена переменная типа Counter. То-есть компи- лятор запросит значение переменной c2, после того как она будет обработана операцией ++, и присвоит ее значение переменной c1. Но, при данном нами оп- ределении в COUNTPP1, мы не можем использовать ++ для увеличения объекта Counter в выражении присваивания: с таким операндом может быть использо- вана только операция ++. Конечно, обыкновенная операция ++, примененная к данным таких типов, как int, не столкнется с этими проблемами.
Для того чтобы иметь возможность использовать написанный нами operator++() в выражениях присваивания, нам необходимо правильно определить тип его воз- вращаемого значения. Это сделано в следующей нашей программе COUNTPP2.
// countpp2.cpp
// операция ++, возвращающий значение
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class Counter
{
private:
unsigned int count;
public:
Counter ( ) : count ( 0 )
{ }
unsigned int get_count ( )
{ return count; }
Counter operator++ ( )
{
++count;
Counter temp;
temp.count = count;
return temp;
}
};
///////////////////////////////////////////////////////////
int main ( )
{
Counter c1, c2; // определяем переменные
cout << "\nc1 = " << c1.get_count ( ); // выводим на экран
cout << "\nc2 = " << c2.get_count ( );
++c1; // увеличиваем c1
c2 = ++c1; // c1=2, c2=2
cout << "\nc1 = " << c1.get_count ( ); // снова показываем значения
cout << "\nc2 = " << c2.get_count ( ) << endl;
return 0;
}
Здесь функция operator++() создает новый объект класса Counter, назван- ный temp, для использования его в качестве возвращаемого значения. Она сна- чала увеличивает переменную count в своем объекте, а затем создает объект temp и присваивает ему значение count, то же значение, что и в собственном объекте. В конце функция возвращает объект temp. Получаем ожидаемый эф- фект. Выражение типа
++c1
теперь возвращает значение, которое можно использовать в других выражениях, таких, как:
c2 = ++c1;
как показано в функции main(), где значение, возвращаемое c1++, присваивает- ся c2. Результат работы этой программы будет следующим:
c1 = 0 c2 = 0 c1 = 2 c2 = 2
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Схожі підручники
- Соціологія Навчально-методичний посібник для студентів всіх напрямків (частина 2)
- Українська мова за професійним спрямуванням. Навчальний посібник (частина 2)
- Конспект лекцій з курсу Введення у фінансову діяльність (частина 2)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 7) онлайн
- ДИЛЕММА ИННОВАТОРА (частина 2) (онлайн)
- Історія педагогіки (частина 2)
