Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

Перегрузки - C++
Помогите пожалуйста написать программу. Описать производный класс, содержащий поле козырь, и функцию, проверяющую кроет ли карта,...

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

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

Массивы и перегрузки - C++
Есть парочка вопросов. Как объявить указатель на двумерный массив? На одномерный в таком виде int *ptr = new int ; а с двумерным...

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

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

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

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

Механизм перегрузки - C++
Ребят помогите. Нужно создать две версии функции, используя механимз перегрузки, заголовки у которых должны быть такими: №1 float F(float...

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


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

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

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