Форум программистов, компьютерный форум CyberForum.ru

Трудности перегрузки из-за наследования - C++

Восстановить пароль Регистрация
 
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
22.09.2012, 18:47     Трудности перегрузки из-за наследования #1
Если у меня есть класс MyClass и в этом классе я хочу реализовать два перегруженных оператора вывода в потоки в виде дружественных функций.

C++
1
2
friend ostream & operator<< (ostream output &, const MyClass & mc);
friend ofstream & operator<< (ofstream output &, const MyClass & mc);
Один для вывода на экран, а другой для вывода в файл.
Вот здесь непонятно, как будет все работать.
Смущает то, что класс ofstream является классом, производным от ostream.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2012, 18:47     Трудности перегрузки из-за наследования
Посмотрите здесь:

C++ Механизм перегрузки
C++ Перегрузки функции
Перегрузки C++
C++ с++ перегрузки
C++ Перегрузки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.09.2012, 19:14     Трудности перегрузки из-за наследования #2
В соответствиями с правилами выбора функций с учётом неявных приведений оптимальным будет вариант с минимальным количеством преобразований типов.

Так что если вы выводите в нечто, что является ofstream и адресуется как ofstream&, то будет вызвана функция для вывода в ofstream. Если выводит происходит в ofstream, который адресуется как ostream&, то будет вызвана функция с ostream-аргументом, так как это даёт минимум преобразований типов. Вот если бы у вас не было функции с ofstream-аргументом, то тогда даже при передаче ofstream как ofstream& он был бы приведён к ostream& для вызова той функции, что есть.
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
22.09.2012, 20:24  [ТС]     Трудности перегрузки из-за наследования #3
А на такой еще вопрос не ответите:
Можно ли всю эту кухню закатать в одну функцию, воспользовавшись как-нибудь хитро ну типа там чем-то вроде typeid?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.09.2012, 20:29     Трудности перегрузки из-за наследования #4
Цитата Сообщение от ramybozy Посмотреть сообщение
Можно ли всю эту кухню закатать в одну функцию
если файл не бинарный то удаляешь вариант для ofstream и на этом все
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
22.09.2012, 20:56  [ТС]     Трудности перегрузки из-за наследования #5
Нет не все, так не получится точно, потому как хотелось перегрузить оператор вывода в файловый поток с использованием бесформатного write.
Ну то есть типа что-то вот такого
C++
1
ofstream.write(reinterpret_cast<const char *>(MyClass *), sizeof(MyClass));
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.09.2012, 22:19     Трудности перегрузки из-за наследования #6
Цитата Сообщение от ramybozy Посмотреть сообщение
Нет не все, так не получится точно
я уточнил: "если файл не бинарный", текстовые файлы через write не пишут, тогда одной перегрузкой не обойтись
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 00:07     Трудности перегрузки из-за наследования
Еще ссылки по теме:

Функции перегрузки C++
C++ Перегрузки
чем отличаются структуры для наследования интерфейса, от структур, для наследования реализаций C++

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

Или воспользуйтесь поиском по форуму:
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
23.09.2012, 00:07  [ТС]     Трудности перегрузки из-за наследования #7
Скажем так, текстовые файлы могут обходиться без этого.
Что запрещает мне точно таким же образом писать в текстовые файлы и читать из них?
Yandex
Объявления
23.09.2012, 00:07     Трудности перегрузки из-за наследования
Ответ Создать тему
Опции темы

Текущее время: 21:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru