C ++ Primer 5e notes (opération de surcharge chap 14 et conversion de type) opérateurs d'incrémentation et de décrémentation

  • Il n'est pas nécessaire que les opérateurs d'incrémentation et de décrémentation soient des fonctions membres de la classe, mais comme cet opérateur modifie l'état de l'objet en cours d'opération, il est recommandé de les définir en tant que fonctions membres.

  • Afin d'être cohérent avec la version intégrée, l'opérateur précédent doit renvoyer la référence de l'objet après incrémentation ou décrémentation.

  • Afin d'être cohérent avec la version intégrée, l'opérateur de publication doit renvoyer la valeur de l'objet avant l'incrémentation ou la décrémentation, pas une référence.

  • Les opérateurs d'incrémentation et de décrémentation doivent définir à la fois les versions antérieures et postérieures.

  • Le formulaire surchargé normal ne peut pas faire la distinction entre pré-opération et post-opération. Pour résoudre ce problème, la version post-version ajoute un paramètre de type int supplémentaire inutilisé:

class StrBlobPtr
{
    
    
public:
    // increment and decrement
    
    //前置版本
    StrBlobPtr& operator++();    // prefix operators
    StrBlobPtr& operator--();

	//后置版本
    StrBlobPtr operator++(int);  // postfix operators
    StrBlobPtr operator--(int);
};
  
StrBlobPtr & StrBlobPt::operator++()
{
    
    
	check(curr,"increment past end of StrBlobPtr");
	++cur;
	return *this;
}

StrBlobPtr & StrBlobPt::operator--()
{
    
    
	--cur;
	check(curr,"increment past end of StrBlobPtr");	
	return *this;
};
 
//后置版本调用前置版本来完成
StrBlobPtr & StrBlobPt::operator++(int)
{
    
    
	StrBlobPt ret = *this;
	++*this;
	return ret;
}
 
//后置版本调用前置版本来完成
StrBlobPtr & StrBlobPt::operator--(int)
{
    
    
	StrBlobPt ret = *this;
	--*this;
	return ret;
};

Si vous souhaitez utiliser des opérateurs de post-incrémentation ou de décrémentation via des appels de fonction, vous devez passer une valeur pour son paramètre entier et l'appeler explicitement.

StrBlobPtr p(a);
p.operator++(0);	//后置版本
p.operator++();		//前置版本

Je suppose que tu aimes

Origine blog.csdn.net/thefist11cc/article/details/113928259
conseillé
Classement