Перегрузка операторов ввода/вывода при наследовании

262
26 июня 2022, 11:40

Есть базовый класс Computer и производный класс Laptop:

class Computer
{
private:
    string model;
};
class Laptop : Computer
{
private:
    string typeOfLaptop;
};

Каким образом следует перегрузить операторы ввода/вывода? Я могу сделать это задав параметры базового класса типом protected и реализовать дружественные функции.

class Computer
{
protected:
    string model;
};
class Laptop : public Computer
{
private:
    string typeOfLaptop;
public:
    friend istream& operator>>(istream& in, Laptop& obj);
    friend ostream& operator<<(ostream& os, const Laptop& obj);
};
istream& operator>>(istream& in, Laptop& obj)
{
    in >> obj.model >> obj.typeOfLaptop;
    return in;
}
ostream& operator<<(ostream& os, const Laptop& obj)
{
    return os << obj.model << " " << obj.typeOfLaptop;
}

Но я думаю, что это не совсем верно. Может быть есть способ получше?

READ ALSO
Удаление элементов массива указателей на базовый класс

Удаление элементов массива указателей на базовый класс

У меня базовый класс с двумя виртуальными методами и два класса-наследникаВ функции main есть массив указателей на базовый класс, который может...

228
Расширение массива в cpp

Расширение массива в cpp

Возможно ли реализовать реализовать именно расширение памяти? Или хотя бы при помощи манипуляций с указателями избежать лишнего копирования...

305
Где правильно требуется поставить скобки в выражении? с++ [закрыт]

Где правильно требуется поставить скобки в выражении? с++ [закрыт]

Скорее всего, данный вопрос не соответствует тематике Stack Overflow на русском, согласно правилам описанным в справке

235
Проблема с генератором чисел

Проблема с генератором чисел

У меня есть массив и я его изменил алгоритмом Фишера-ЙетсаПроблема заключается в том, что у меня числа в измененном массиве начинаются с нуля,...

384