Я написал класс, который представляет Qubit. Таким образом, объект имеет только одно значение, состояние, с 0 или 1 (bool). Для выполнения необходимых вычислений я перегружал операторов, например, +, *, ^. Кажется, что все в порядке с + и *, также с ^, но только если я не буду использовать его с оператором std :: ostream.Оператор XOR с оператором std :: ostream
Qubit x5, x6;
cout << x5^x6; !ERROR!
но с
Qubit x5, x6;
Qubit z = x5^x6;
cout << z;
это работает. Мой станд: оператор
std::ostream & operator <<(std::ostream & os, const Qubit & qubit)
{
os << qubit.GetState();
return os;
}
и мой 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;
}
Вернитесь к своей книге на C++ и просмотрите главу о приоритете оператора. –
http://en.cppreference.com/w/cpp/language/operator_precedence –
У вас есть утечка памяти в вашей функции 'operator ^'. Также читайте больше о [перегрузке оператора] (http://en.cppreference.com/w/cpp/language/operators), особенно каноническом [разделе двоичных арифметических операторов] (http://en.cppreference.com/w/cpp/язык/операторы # Binary_arithmetic_operators). Обратите внимание на пример, который говорит вам возвращать * по значению *, а не по ссылке. –