ΠΠ°ΠΊ Ρ ΡΠΊΠ°Π·Π°Π», ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠ΅ ΡΠ»Π΅Π½Ρ Π½Π΅ ΠΎΡΠΌΠ΅Π½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠ·ΡΠΊΠ°, Π° ΠΈΠ· ΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΡΠΆΠ΅Π½, Π° Π²Ρ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΠ΅ Π΅Π³ΠΎ, ΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅Π½Π°) Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠΉ. Π’ΠΎ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° tr1::shared_ptr, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
template<class T> class shared_ptr {
public:
shared_ptr(shared_ptr const& r); // ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ
template<class Y> // ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ
shared_ptr(shared_ptr<Y> const& r); // ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ
shared_ptr& operator=(shared_ptr const& r); // ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ
template<class Y> // ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
shared_ptr& operator=(shared_ptr<Y> const& r); // ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ
...
};
β’ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΡ Π²ΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΏΡ.
β’ ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ 46: ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠΉΡΠ΅ Π²Π½ΡΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΡΠ»Π΅Π½Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ°
Π ΠΏΡΠ°Π²ΠΈΠ»Π΅ 24 ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²ΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±ΡΠ»Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ operator* Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Rational. ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ ΠΎΡΠ²Π΅ΠΆΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π² Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΡΠ΅, Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΠ· ΠΏΡΠ°Π²ΠΈΠ»Π° 24. ΠΡΠ»ΠΈΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈ ΠΊΠ»Π°ΡΡ Rational, ΠΈ operator* Π² Π½Π΅ΠΌ ΡΠ΄Π΅Π»Π°Π½Ρ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ:
template <typename T>
class Rational {
public:
Rational(const T& numerator = 0, // ΡΠΌ. Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 20 β ΠΏΠΎΡΠ΅ΠΌΡ
const T& denominator = 1); // ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅
const T numerator() const; // ΡΠΌ. Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 28 β ΠΏΠΎΡΠ΅ΠΌΡ
const T denominator() const; // ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎ
... // Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 3 β
// ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½Ρ
};
template <typename T>
const Rational<T> operator*(const Rational<T>& lhs,
const Rational<T>& rhs)
{...}
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 24, ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΌΠ΅ΡΠ°Π½Π½ΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ. ΠΡ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΏΠΎΠ΄Π²ΠΎΡ ΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 24 ΡΠ°Π±ΠΎΡΠ°Π». ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Rational ΠΈ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ operator* ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ:
Raional<int> oneHalf(1, 2); // ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΏΡΠ°Π²ΠΈΠ»Π° 24,
// Π½ΠΎ Rational β ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½
Ratinal<int> result = oneHalf * 2; // ΠΎΡΠΈΠ±ΠΊΠ°! ΠΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ
Π’ΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, Π½Π°Π²ΠΎΠ΄ΠΈΡ Π½Π° ΠΌΡΡΠ»Ρ, ΡΡΠΎ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Rational Π΅ΡΡΡ Π½Π΅ΡΡΠΎ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π΅ Π΅Π³ΠΎ ΠΎΡ Π½Π΅ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. Π ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΠΊ. Π ΠΏΡΠ°Π²ΠΈΠ»Π΅ 24 ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π», ΠΊΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ Π²ΡΠ·Π²Π°ΡΡ (operator*, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° Rational), Π·Π΄Π΅ΡΡ ΠΆΠ΅ Π΅ΠΌΡ ΠΎΠ± ΡΡΠΎΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ (ΡΠΎ Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ) ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π° operator*. ΠΠ½ Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΠΈΠΌΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ operator* ΠΈ ΠΎΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° Rational<T>, Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ T. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΡΠ°ΡΡΡ Π²ΡΠ²Π΅ΡΡΠΈ T, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΌΠΎΡΡΠΈΡ Π½Π° ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ operator*. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Rational<int> (ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ oneHalf) ΠΈ int (ΡΠΈΠΏ Π»ΠΈΡΠ΅ΡΠ°Π»Π° 2). ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΡΠ²ΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΈΠΏΠ° oneHalf ΡΠ΄Π΅Π»Π°ΡΡ Π»Π΅Π³ΠΊΠΎ. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ operator* ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ Rational<T>, Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ operator* (oneHalf), ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Rational<int>, ΠΏΠΎΡΡΠΎΠΌΡ T Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ int. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ. ΠΠ· ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠΈΠΏ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° operator* ΡΠ°Π²Π΅Π½ Rational<T>, Π½ΠΎ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ operator* (ΡΠΈΡΠ»ΠΎ 2), ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int. ΠΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ Π΅ΡΡΡ T Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅? ΠΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Π½Π΅-explicit ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ 2 Π² Rational<int> ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ T Π΅ΡΡΡ int, Π½ΠΎ Π½Π° Π΄Π΅Π»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΡΠ°ΠΊ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΈΠΊΠΎΠ³Π΄Π°. ΠΠ°, ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ. Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΡΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ (ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ). ΠΠΎ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ. Π ΠΏΡΠ°Π²ΠΈΠ»Π΅ 24 Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π½Π΅ Π±ΡΠ»ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ²ΠΎΠ΄Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»Π°. ΠΠ΄Π΅ΡΡ ΠΆΠ΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ C++ (ΡΠΌ. ΠΏΡΠ°Π²ΠΈΠ»ΠΎ 1), ΠΈ ΠΎΠ½Π° Π²ΡΡ ΠΎΠ΄ΠΈΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ»Π°Π½.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π² Π²ΡΠ²ΠΎΠ΄Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π°, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Rational<T> ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ operator* Π΄Π»Ρ Rational<T> ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ-Π΄ΡΡΠ³Π°. Π ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΡΠ²ΠΎΠ΄Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ (ΠΎΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ), ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΈΠΏ T Π²ΡΠ΅Π³Π΄Π° ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ Rational<T>. ΠΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ operator* ΠΊΠ°ΠΊ Π΄ΡΡΠ³Π° ΠΊΠ»Π°ΡΡΠ° Rational<T>:
template <typename T>
class Rational {
public:
...
friend // ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
const Rational operator*(const Rational& lhs, // operator*
const Rational& rhs); // (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌ. Π½ΠΈΠΆΠ΅)
};
template <typename T> // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
const Rational<T> operator*(const Rational<T>& lhs, // operator*
const Rational<T>& rhs)
{...}
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Ρ operator* Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ oneHalf ΡΠΈΠΏΠ° Rational<int> ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ Rational<int> ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ-Π΄ΡΡΠ³ operator*, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Rational<int>. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ (Π° Π½Π΅ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ), ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅-explicit ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ Rational) ΠΈ, ΡΡΠ°Π»ΠΎ Π±ΡΡΡ, ΡΡΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ operator* Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ².
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠ°Π·Π° Β«ΡΡΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡΒ» Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΈΡΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΡΡΠ΅Π½ΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΎΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, Π½ΠΎ Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΡΡΡ. ΠΡΠΊΠΎΡΠ΅ ΠΌΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Ρ Ρ ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ operator* Π² ΠΊΠ»Π°ΡΡΠ΅ Rational.
ΠΠ½ΡΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΊΠ»Π°ΡΡΠ° ΠΈΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π½ΡΡΡΠΈ Ratonal<T> ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΠΎ Rational Π²ΠΌΠ΅ΡΡΠΎ Ratonal<T>. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΡΡΠ½Π΅Π΅. Π― Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ» ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ operator* ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ Rational Π²ΠΌΠ΅ΡΡΠΎ Rational<T>. Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ operator* ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
template <typename T>
class Rational {
public:
...
friend
const Rational<T> operator*(const Rational<T>& lhs,
const Rational<T>& rhs);
...
};
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΡΠ΅ (ΠΈ ΡΠ°ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ ΡΠΎΡΠΌΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠΠΎΠ΄, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠ·Π²Π°ΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ (operator*, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° Rational<int> ΠΈ Rational<int>), Π½ΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π²Π½ΡΡΡΠΈ Rational, Π½ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠ°ΠΌ. ΠΠ°ΡΠ° ΡΠ΅Π»Ρ β Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ operator*, Π½Π΅ ΡΠ²Π»ΡΡΡΠ΅ΠΉΡΡ ΡΠ»Π΅Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΅Π΅ Π½Π΅ Π΄ΠΎΡΡΠΈΡΡ. ΠΡΠ»ΠΈ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ (Π° ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° Rational), ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΈ ΠΎΠ± Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Π΅Π³ΠΎ ΠΈ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ.
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ β ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ΅Π»ΠΎ operator* Ρ Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ:
template <typename T>
class Rational {
public:
...
friend Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.numerator() * rhs.numerator(), // ΡΠ° ΠΆΠ΅
lhs.denominator () * rhs.denominator()); // ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ,
} // ΡΡΠΎ ΠΈ
// Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ 24
};
ΠΠ°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π½ΡΠΆΠ½ΠΎ: Π²ΡΠ·ΠΎΠ²Ρ operator* Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΌΠ΅ΡΠ°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ, ΠΊΠΎΠΌΠΏΠΎΠ½ΡΡΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ. Π£ΡΠ°!