Advertisement
chevengur

СПРИНТ № 4 | Перегрузка операторов | Урок 2: Перегрузка операторов ввода-вывода

Nov 27th, 2023 (edited)
1,265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <numeric>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class Rational {
  7. public:
  8.     Rational() = default;
  9.  
  10.     Rational(int numerator)
  11.         : numerator_(numerator)
  12.         , denominator_(1) {
  13.     }
  14.  
  15.     Rational(int numerator, int denominator)
  16.         : numerator_(numerator)
  17.         , denominator_(denominator) {
  18.         Normalize();
  19.     }
  20.  
  21.     int Numerator() const {
  22.         return numerator_;
  23.     }
  24.  
  25.     int Denominator() const {
  26.         return denominator_;
  27.     }
  28.  
  29.     friend std::ostream& operator<<(std::ostream& os, Rational& rat);
  30.     friend std::istream& operator>>(std::istream& in, Rational& rat);
  31.    
  32.  
  33. private:
  34.     void Normalize() {
  35.         if (denominator_ < 0) {
  36.             numerator_ = -numerator_;
  37.             denominator_ = -denominator_;
  38.         }
  39.         const int divisor = gcd(numerator_, denominator_);
  40.         numerator_ /= divisor;
  41.         denominator_ /= divisor;
  42.     }
  43.    
  44.     int numerator_ = 0;
  45.     int denominator_ = 1;
  46. };
  47.  
  48. std::ostream& operator<<(std::ostream& os, Rational& rat){
  49.     os << rat.Numerator() << "/" << rat.Denominator();
  50.     return os;
  51. }
  52.  
  53. std::istream& operator>>(std::istream& is, Rational& rat){
  54.     char b;
  55.     is >> rat.numerator_ >> b >> rat.denominator_;
  56.     return is;
  57. }
  58.  
  59. int main(){
  60.     Rational rational;
  61.     Rational rational1;
  62.  
  63.     std::cout << rational1;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement