J'ai écrit une classe qui représente Qubit. Donc l'objet n'a qu'une seule valeur, état, avec 0 ou 1 (bool). Pour effectuer les calculs nécessaires, j'ai surchargé les opérateurs comme +, *, ^. Il semble que tout va bien avec + et *, aussi avec ^, mais seulement si je ne l'utilise pas avec l'opérateur std :: ostream.Opérateur XOR avec l'opérateur std :: ostream
Qubit x5, x6;
cout << x5^x6; !ERROR!
mais avec
Qubit x5, x6;
Qubit z = x5^x6;
cout << z;
il fonctionne. Mon std: opérateur
std::ostream & operator <<(std::ostream & os, const Qubit & qubit)
{
os << qubit.GetState();
return os;
}
et mon opérateur XOR
Qubit & Qubit::operator ^(const Qubit & qubit)
{
Qubit *q = new Qubit;
((this->state == 1 && qubit.state == 0) ||
(this->state == 0 && qubit.state == 1)) ? q->SetState(1) : q->SetState(0);
return *q;
}
Revenez dans votre livre C++ et passez en revue le chapitre sur la priorité des opérateurs. –
http://fr.cppreference.com/w/cpp/language/operator_precedence –
Vous avez une fuite de mémoire dans votre fonction 'operator ^'. En savoir plus sur [surcharge opérateur] (http://en.cppreference.com/w/cpp/language/operators) en particulier la section canonique [opérateurs binaires arithmétiques] (http://en.cppreference.com/w/cpp/language/operator # Binary_arithmetic_operators). Notez l'exemple qui vous indique de renvoyer * par valeur * et non par référence. –