Прежде всего, я бы посоветовал не делать этого, потому что operator |
обычно не имеет этого побочного эффекта.Перегрузка оператора таким образом нарушает правило № 2 в этих общих правилах перегрузки операторов.
Хорошо, с нашей точки зрения, C ++ не позволяет вам перегружать операторы для интегральных данныхтипы.Это может привести к поломке кода, если они это сделают.
Однако вы можете перегружать операторы рациональными значениями.Вы можете сделать это примерно так:
class rational {
rational operator|(rational other) {
return rational(this->numerator, other.numerator);
}
};
Затем вы можете создать несколько конструкторов, таких как:
class rational {
// I'm assuming you have something like this for the implementation of operator| to work
rational(int n, int d) {
this->numerator = n;
this->denominator = d;
}
// This constructor creates a rational by putting everything over 1
// This will function the same mathematically as the number itself
rational(int n) {
this->numerator = n;
this->denominator = 1; // a single number is put over 1
}
};
Теперь вы можете использовать operator|
следующим образом:
rational r = rational(5) | 7;
Что, кажется, близко к тому, что вы хотите.
Примечание: Когда вы доберетесь до здесь, если вы сделаете рациональные решения, примите одно число в конструктореи положив его на 1, вы можете осознать, что вам не нужен специальный operator|
, чтобы создать рациональный способ.Если ваша рациональная реализация реализует деление с использованием умножения на обратную величину, вы можете просто сделать это вместо этого:
rational r = rational(5) / 7;
Что намного яснее, что вы собираетесь делать в любом случае.