Surchargé d'affectation d'Addition opérateur en C++ pour les deux ou plus de deux objets?
J'ai surchargé l'opérateur + comme ce
class sample
{
private :
int x;
public :
sample(int x1 =0)
{
x = x1;
}
sample operator+(sample s);
};
sample sample::operator+(sample s)
{
x = x + s.x;
return *this;
}
int main()
{
sample s1(10);
sample s2;
s2 = s2 + s1;
return 0;
}
Est-ce correct?
Ma question est Si je veux ajouter deux échantillons différents objets comment j'ai surchargé le opeartor; e.g pour s = s1 + s2
;
J'ai envie de faire s = s + s1 + s2
avec la mise en œuvre existantes.
Regardez ici! courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html ou cprogramming.com/tutorial/operator_overloading.html
notez que
Aussi,
Aussi, vous semblez être de tenter de faire la
édité !
notez que
operator+
devrait pas modifier la valeur de l'objet sur la gauche de la +
, mais le vôtre. Si vous avez écrit s3 = s1 + s2
, votre code devrait changer s1
également contenir le résultat.Aussi,
main
a un int
type de retour.Aussi, vous semblez être de tenter de faire la
operator+
une fonction membre de la sample
classe, mais vous l'avez fait tout à fait tort, ce code ne vient même pas près de la compilation. Voir sscce.org pour savoir comment écrire du code pour une question.édité !
OriginalL'auteur Raulp | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
À l'aide de l'ami de l'opérateur de surcharge devrait faire l'affaire pour vous et de est une commune de la manière de définir des opérateurs binaires, il suffit d'ajouter:
Si vous voulez qu'il reste un membre, (ce qui a des inconvénients dans certaines rares circonstances, et pas d'avantages), vous devez vous rendre à l'opérateur de
const
fonction:L'une de ces permettra à l'opérateur de chaînage. La raison de votre précédente
s = s + s1 + s2
a défaut, c'est que les + s1
permettrait de remplir et de retourner la temporairesample
objet. Ensuite, il allait tenter d'ajouters2
à l'échantillon. Cependant, temporaires ne peut êtreconst
références[1], et en tant que telle, ne peut utiliserconst
fonctions de membre. Depuis votreoperator+
fonction de membre n'est pas unconst
fonction, vous ne pouvez pas utiliser cette fonction sur leconst
temporaire. Notez que pour faireconst
, j'ai dû le réécrire, depuis votre version modifie l'objet sur le côté gauche de la+
.[1], avec quelques exceptions, ne sont pas particulièrement pertinentes en l'espèce, à savoir les rvalues
Désolé, je ne comprends pas la question, demandez-vous si à l'aide de la
friend
mot-clé est le seul moyen d'atteindre l'exigence?je voulais dire sans l'aide d'un ami cette fonction peut être fait.Mais je pense que c'est le seul moyen.
non, vous pouvez le faire sans
friend
fonctions tout aussi facilement, mais ton code est faux, et c'est la façon "normale" de le faireOui, vous pouvez le faire sans ami, mais pour ce faire, vous devez ajouter une méthode de lecture pour la
x
variable membreOriginalL'auteur higuaro