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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
#1

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

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

Если у меня есть класс 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++
Помогите пожалуйста написать программу. Описать производный класс, содержащий поле козырь, и функцию, проверяющую кроет ли карта,...

Перегрузки (operator+) - C++
Прошу помощи не могу понять как сделать реализацию для этого куска Также добавьте operator+ для сложения объекта String с...

Перегрузки функции - C++
вот задание: Задание 1: Разработка класса. Разработайте класс FRACTION. Элемент класса: ? числитель; ? знаменатель. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 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++
Есть парочка вопросов. Как объявить указатель на двумерный массив? На одномерный в таком виде int *ptr = new int ; а с двумерным...

Перегрузки массивов - C++
Даны массивы следующих типов данных: Long = {},double ={},float = {}, int ={},short ={},long long ={}.

Функции перегрузки - C++
Здравствуйте, помогите решить задачу. Зараниее спасибо. С помощью механизма перегрузки функций реализовать функции для нахождения...

Выбор правильной перегрузки - C++
Приветствую. Есть код вида: #include &lt;iostream&gt; template&lt;typename T&gt; void deserialize(const std::string&amp; json, const...


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

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

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