Поделиться через


Увеличение и уменьшение (C++)

Увеличение и операторы декремента делятся на особая категория, поскольку 2 варианта каждого:

  • Preincrement и postincrement

  • Predecrement и postdecrement

При написании перегруженные функции операторов, может быть полезным реализовать отдельно версии для префикса и postfix версии этих операторов.Различие между 2, наблюдаются следующее правило: Форма префикса оператора объявленный способом в точности так же, как любой другой унарный оператор. постфиксная форма принимает дополнительный аргумент типа int.

ПримечаниеПримечание

При указании перегруженный оператор инкремента или декремента постфиксная форма оператора, дополнительный аргумент должен быть типа int; определение любого другого типа вызовет ошибку.

В следующем примере показано, как задать префикс и postfix увеличение и операторы декремента, Point класс.

// increment_and_decrement1.cpp
class Point
{
public:
   // Declare prefix and postfix increment operators.
   Point& operator++();       // Prefix increment operator.
   Point operator++(int);     // Postfix increment operator.

   // Declare prefix and postfix decrement operators.
   Point& operator--();       // Prefix decrement operator.
   Point operator--(int);     // Postfix decrement operator.

   // Define default constructor.
   Point() { _x = _y = 0; }

   // Define accessor functions.
   int x() { return _x; }
   int y() { return _y; }
private:
   int _x, _y;
};

// Define prefix increment operator.
Point& Point::operator++()
{
   _x++;
   _y++;
   return *this;
}

// Define postfix increment operator.
Point Point::operator++(int)
{
   Point temp = *this;
   ++*this;
   return temp;
}

// Define prefix decrement operator.
Point& Point::operator--()
{
   _x--;
   _y--;
   return *this;
}

// Define postfix decrement operator.
Point Point::operator--(int)
{
   Point temp = *this;
   --*this;
   return temp;
}
int main()
{
}

Те же операторы могут быть определены в области файла (head глобально), используя следующие функции:

friend Point& operator++( Point& )      // Prefix increment
friend Point& operator++( Point&, int ) // Postfix increment
friend Point& operator--( Point& )      // Prefix decrement
friend Point& operator--( Point&, int ) // Postfix decrement

Аргумент типа int что определяет форму или постфиксная приращения оператора декремента обычно не использует к аргументам передачи.Обычно он содержит значение 0.Однако ее можно использовать следующим образом:

// increment_and_decrement2.cpp
class Int
{
public:
    Int &operator++( int n );
private:
    int _i;
};

Int& Int::operator++( int n )
{
    if( n != 0 )    // Handle case where an argument is passed.
        _i += n;
    else
        _i++;       // Handle case where no argument is passed.
    return *this;
}
int main()
{
   Int i;
   i.operator++( 25 ); // Increment by 25.
}

Нет синтаксис для использования операторов инкремента или декремента, чтобы передать эти значения, отличные от явного вызова, как показано в предыдущем примере кода.Более простой способ реализации этой возможности перегружать оператор сложения (и назначения+=).

См. также

Ссылки

Перегрузка операторов