Index et décrémentation (C++)
Les opérateurs d'incrémentation et de décrémentation appartiennent à une catégorie spéciale car il existe deux types de chacun :
Preincrement et postincrement
Predecrement et postdecrement
Lorsque vous écrivez des fonctions surchargées d'opérateur, il peut être utile d'implémenter des versions distinctes pour le préfixe et de suffixe les versions de ces opérateurs.Pour distinguer les deux, la règle suivante est observé : La forme préfixée de l'opérateur est déclaré exactement la même manière que tout autre opérateur unaire ; le formulaire de suffixe reçoit un argument de type int.
[!REMARQUE]
En spécifiant un opérateur surchargé pour le forme suffixée de l'incrément ou de l'opérateur de décrémentation, l'argument supplémentaire doit être de type int; spécifier tout autre type génère une erreur.
L'exemple de code suivant montre comment définir le préfixe et la post-incrémentation les opérateurs d'incrémentation et de décrémentation pour la classe d' 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()
{
}
Les mêmes opérateurs peuvent être définis dans la portée du fichier (globalement) à l'aide de les têtes suivantes de fonction :
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
L'argument de type int correspondant au forme suffixée de l'incrément ou de l'opérateur de décrémentation n'est pas généralement utilisé pour passer des arguments.Elle contient généralement la valeur 0.Toutefois, elle peut être utilisée comme suit :
// 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.
}
Il n'existe aucune syntaxe d'utilisation de l'incrément ou les opérateurs d'incrémentation pour passer ces valeurs autres que l'appel explicite, comme indiqué dans le code précédent.Un moyen plus simple d'implémenter cette fonctionnalité est de surcharger l'ajout/opérateur d'assignation (+=).