Рубрики

Перегрузка операторов вставки потока (<>) в C ++

В C ++ оператор вставки потока «<<» используется для вывода, а оператор извлечения «>>» используется для ввода.

Мы должны знать следующие вещи, прежде чем мы начнем перегружать эти операторы.
1) cout является объектом класса ostream, а cin является объектом класса istream
2) Эти операторы должны быть перегружены как глобальная функция. И если мы хотим разрешить им доступ к личным данным членов класса, мы должны сделать их друзьями.

Почему эти операторы должны быть перегружены как глобальные?
При перегрузке оператора, если оператор перегружен как член, он должен быть членом объекта с левой стороны оператора. Например, рассмотрим выражение «ob1 + ob2» (пусть ob1 и ob2 — объекты двух разных классов). Чтобы сделать этот оператор компилируемым, мы должны перегрузить '+' в классе 'ob1' или сделать '+' глобальной функцией.
Операторы «<<» и «>>» называются «cout << ob1» и «cin >> ob1». Поэтому, если мы хотим сделать их методом-членом, они должны быть сделаны членами классов ostream и istream, что в большинстве случаев не является хорошим вариантом. Следовательно, эти операторы перегружены как глобальные функции с двумя параметрами: cout и объектом определенного пользователем класса.

Ниже приведена полная программа на C ++ для демонстрации перегрузки операторов <>.

#include <iostream>

using namespace std;

  

class Complex

{

private:

    int real, imag;

public:

    Complex(int r = 0, int i =0)

    {  real = r;   imag = i; }

    friend ostream & operator << (ostream &out, const Complex &c);

    friend istream & operator >> (istream &in,  Complex &c);

};

  

ostream & operator << (ostream &out, const Complex &c)

{

    out << c.real;

    out << "+i" << c.imag << endl;

    return out;

}

  
istream & operator >> (istream &in,  Complex &c)
{

    cout << "Enter Real Part ";

    in >> c.real;

    cout << "Enter Imagenory Part ";

    in >> c.imag;

    return in;

}

  

int main()

{

   Complex c1;

   cin >> c1;

   cout << "The complex object is ";

   cout << c1;

   return 0;

}

Выход:

Enter Real Part 10
Enter Imagenory Part 20
The complex object is 10+i20

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Перегрузка операторов вставки потока (<>) в C ++

0.00 (0%) 0 votes