Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
1

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

22.09.2012, 18:47. Показов 533. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если у меня есть класс MyClass и в этом классе я хочу реализовать два перегруженных оператора вывода в потоки в виде дружественных функций.

C++
1
2
friend ostream & operator<< (ostream output &, const MyClass & mc);
friend ofstream & operator<< (ofstream output &, const MyClass & mc);
Один для вывода на экран, а другой для вывода в файл.
Вот здесь непонятно, как будет все работать.
Смущает то, что класс ofstream является классом, производным от ostream.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2012, 18:47
Ответы с готовыми решениями:

Должен ли хотя бы один из параметров оператора перегрузки был того же типа, что и тип, в котором этот оператор перегрузки определен
A) В зависимости от перегружаемой операции B) Нет C) Да D) В зависимости от типа, в котором...

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций?
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с...

Перегрузки + и ==
Проблема с перегрузкой оператора + (объединение списков). Списки объединяет, но к первому списку...

Перегрузки в C#
Нужны были перегрузки в С#, + – объединить списки (list+list);-- – удалить элемент из начала (типа...

6
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
22.09.2012, 19:14 2
В соответствиями с правилами выбора функций с учётом неявных приведений оптимальным будет вариант с минимальным количеством преобразований типов.

Так что если вы выводите в нечто, что является ofstream и адресуется как ofstream&, то будет вызвана функция для вывода в ofstream. Если выводит происходит в ofstream, который адресуется как ostream&, то будет вызвана функция с ostream-аргументом, так как это даёт минимум преобразований типов. Вот если бы у вас не было функции с ofstream-аргументом, то тогда даже при передаче ofstream как ofstream& он был бы приведён к ostream& для вызова той функции, что есть.
1
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
22.09.2012, 20:24  [ТС] 3
А на такой еще вопрос не ответите:
Можно ли всю эту кухню закатать в одну функцию, воспользовавшись как-нибудь хитро ну типа там чем-то вроде typeid?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.09.2012, 20:29 4
Цитата Сообщение от ramybozy Посмотреть сообщение
Можно ли всю эту кухню закатать в одну функцию
если файл не бинарный то удаляешь вариант для ofstream и на этом все
0
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
22.09.2012, 20:56  [ТС] 5
Нет не все, так не получится точно, потому как хотелось перегрузить оператор вывода в файловый поток с использованием бесформатного write.
Ну то есть типа что-то вот такого
C++
1
ofstream.write(reinterpret_cast<const char *>(MyClass *), sizeof(MyClass));
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.09.2012, 22:19 6
Цитата Сообщение от ramybozy Посмотреть сообщение
Нет не все, так не получится точно
я уточнил: "если файл не бинарный", текстовые файлы через write не пишут, тогда одной перегрузкой не обойтись
0
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
23.09.2012, 00:07  [ТС] 7
Скажем так, текстовые файлы могут обходиться без этого.
Что запрещает мне точно таким же образом писать в текстовые файлы и читать из них?
0
23.09.2012, 00:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2012, 00:07
Помогаю со студенческими работами здесь

с++ перегрузки
Нужна помощь с реализацией кода(перегрузка добавления элемента в массив) Полная постановка...

Перегрузки
Помогите пожалуйста!!!! Перегрузку оператора – слева объект, справа другой тип данных вроде...

Перегрузки
Помогите пожалуйста написать программу. Описать производный класс, содержащий поле козырь, и...

Перегрузки
Изменить программу предыдущей лабораторной работы. Функцию, определяющую бьет ли первая карта...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru