Рубрики

C ++ | Перегрузка оператора | Вопрос 4

Какой из следующих операторов предпочтительнее перегружать как глобальную функцию, а не как метод-член?
(A) Postfix ++
(B) Оператор сравнения
(C) Оператор вставки <<
(D) Префикс ++

Ответ: (с)
Объяснение: cout — это объект класса ostream, который является классом, определенным компилятором.

Когда мы делаем «cout << obj», где obj является объектом нашего класса, компилятор сначала ищет операторную функцию в ostream, а затем ищет глобальную функцию.
Один из способов перегрузить оператор вставки — изменить класс ostream, что может быть не очень хорошей идеей. Таким образом, мы делаем глобальный метод. Ниже приведен пример.

#include <iostream>
using namespace std;

class Complex
{
private:
    int real;
    int imag;
public:
    Complex(int r = 0, int i =0)
    {
        real = r;
        imag = i;
    }
    friend ostream & operator << (ostream &out, const Complex &c);
};

ostream & operator << (ostream &out, const Complex &c)
{
    out << c.real;
    out << "+i" << c.imag;
    return out;
}

int main()
{
    Complex c1(10, 15);
    cout << c1;
    return 0;
}

Тест на этот вопрос

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

C ++ | Перегрузка оператора | Вопрос 4

0.00 (0%) 0 votes