Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 108
1

Перегрузка operator>> и operator<< в абстрактном классе

26.11.2018, 06:14. Просмотров 2451. Ответов 5
Метки нет (Все метки)

Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот кажется что есть и другое решение. Попытался создать следующий абстрактный класс и потомка к нему:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class transport {
protected:
    float speed, cost;
    virtual istream& operator >>(istream&) = 0;
    virtual ostream& operator <<(ostream&) = 0;
};
 
class electric_transport :public transport {
public:
    istream& operator >>(istream &in) override{
        cout << "Enter the speed of electric transport: " << endl;
        in >> speed;
        cout << "Enter the cost of electric transport: " << endl;
        in >> cost;
        return in;
    }
    ostream& operator <<(ostream &out) override {
        out << "Information of electric transport\n"<< "Speed: " \
            << speed << "\nCost: " << cost << endl;
        return out;
    }
};
В чем ошибка и как подобное реализовать? Спасибо за Ваше внимание.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2018, 06:14
Ответы с готовыми решениями:

Перегрузка operator [] в классе
Доброе всем! как перегрузить оператор , чтобы иметь возможность записывать туда значения?...

Перегрузка оператора operator+() в пользовательском классе (сложение строк)
Хотел научить класс складывать строки, но на моменте освобождения памяти temp происходит ошибка. ...

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число"
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to...

5
Модератор
Эксперт С++
9778 / 8344 / 5085
Регистрация: 18.12.2011
Сообщений: 22,310
26.11.2018, 06:47 2
Это решение не соответствует тому, что от него ожидается.
Получится, что слева от операций >> и << нужно писать экземпляр класса, а справа поток:
C++
1
2
3
4
electric_transport et;
transport& ts=et;
ts>>cin;
ts<<cout;
и
C++
1
2
3
4
5
6
7
class transport {
protected:
    float speed, cost;
public:
    virtual istream& operator >>(istream&) = 0;
    virtual ostream& operator <<(ostream&) = 0;
};
1
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 108
26.11.2018, 07:31  [ТС] 3
zss, тогда как превратить это в более привычную форму?
C++
1
cin >> ts;
При условии что существует абстрактный класс. Нужно как - то по особому переопределить перегрузку в классе потомке?
0
С чаем беда...
Эксперт CЭксперт С++
7860 / 3790 / 1040
Регистрация: 18.10.2014
Сообщений: 8,049
26.11.2018, 08:17 4
Лучший ответ Сообщение было отмечено Adrian_One как решение

Решение

Цитата Сообщение от Adrian_One Посмотреть сообщение
тогда как превратить это в более привычную форму?
Смотря что вы имеете в виду под "превратить".

С одной стороны: Никак. Перегрузка с потоком слева возможно только отдельностоящими функциями. Методами класса этого сделать нельзя.

С другой стороны: Ну напишите теперь перегрузки отдельностоящими функциями, которые просто изнутри будут вызывать ваши "странные" функции. Готово.
1
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 108
26.11.2018, 08:24  [ТС] 5
TheCalligrapher,
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Перегрузка с потоком слева возможно только отдельностоящими функциями. Методами класса этого сделать нельзя.
Спасибо.
0
13462 / 7127 / 1710
Регистрация: 30.01.2014
Сообщений: 11,899
26.11.2018, 08:25 6
Цитата Сообщение от Adrian_One Посмотреть сообщение
как превратить это в более привычную форму?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class transport {
protected:
    float speed, cost;
    
    virtual std::istream& read(std::istream &) = 0;
    virtual std::ostream& write(std::ostream &) const = 0;
    
    friend std::istream& operator>>(std::istream & in, transport & v)
    {
        return v.read(in);
    }
    friend std::ostream& operator<<(std::ostream & out, transport const & v)
    {
        return v.write(out);
    }
};
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2018, 08:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

operator[] в классе
Написал собственный класс, где хранит одномерный массив template &lt;class TTT&gt; public class...

Вызов operator[] через operator[] const
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный...

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он...

Перегрузка operator+
Здравствуйте. Написал программу: #include &lt;iostream&gt; using namespace std; class Coord {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.