ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн

Постфиксные операции

До сих пор мы применяли операцию увеличения, используя только префиксную запись:

++c1

А как можно использовать постфиксную запись, где переменная увеличива- ется после того, как ее значение было использовано в выражении?

c1++

Чтобы иметь возможность работать с двумя версиями операции, мы опреде- лим два варианта перегрузки операции ++. Это показано в программе POSTFIX.

// postfix.cpp

// префиксная и постфиксная операции ++ для нашего класса

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

class Counter

{

private:

    unsigned int count;

  public:

    Counter ( ) : count ( 0 )

      { }

    Counter ( int c ) : count ( c )

 

{ }

    unsigned int get_count ( )

      { return count; }

    Counter operator++ ( )

      {

        return Counter ( ++count );

      }

     Counter operator++ ( int )

      {

        return Counter ( count++ );

      }

};

///////////////////////////////////////////////////////////

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 ( );

 

  c2 = c1++;

 

  cout << "\nc1 = " << c1.get_count ( ); // и снова

  cout << "\nc2 = " << c2.get_count ( ) << endl;

 

  return 0;

}

 

Теперь у нас есть два типа объявления функции operator++. С одной из них, для префиксной операции, мы уже были знакомы ранее:

Counter operator++ ( );

Для реализации постфиксной записи операции ++ используем новую функцию:

Counter operator++ ( int );

Различие между этими функциями только в том, что в скобках стоит int. Здесь int не играет роли аргумента и не означает целое число. Это просто сигнал для компилятора, чтобы использовалась постфиксная версия операции. Разработ- чики C++ нашли полезным повторное использование существующих операций и ключевых слов; в данном случае int предназначена также и для обозначения постфиксной операции. (А сможем ли мы использовать лучший синтаксис?) Результат работы программы будет таким:

c1 = 0 c2 = 0 c1 = 2 c2 = 2 c1 = 3 c2 = 2

Первые четыре строки мы уже видели в программах COUNTPP2 и COUNTPP3. А в последних двух строках мы видим результаты, полученные после обработки выражения

c2 = c1++;

Здесь c1 увеличивается до 3, но переменной c2 значение переменной c1 было присвоено до ее увеличения. Поэтому переменная c2 имеет значение 2.

Конечно же, мы можем использовать различные варианты записи операции и для operator--.

 

8