Главная->Інформатика та програмування->Содержание->Значения, возвращаемые операцией

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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

 

6