|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|||||||||||
Перегрузка fstream в дочернем классе30.10.2014, 18:01. Показов 4028. Ответов 37
Метки нет (Все метки)
h
Пытался унаследовать что StudentsBD, что StudentManipulation- в котором и приисходит работа с файлом реакции некакой, вообще не реагирует на перегрузку, ставил брек поинт что бы остановливалось в методах этих перегрузки, вобще оно их пропускает( Что я делаю нетак?
0
|
|||||||||||
| 30.10.2014, 18:01 | |
|
Ответы с готовыми решениями:
37
Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе Ошибка в дочернем классе Переопределенные операторы в дочернем классе |
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
||
| 30.10.2014, 20:28 [ТС] | ||
|
<< >> для fstream что бы они до того как в стринг переменную записали, или вывели в стринг. Отредактировали текст. ехх ну что так сложно обяснить. Причем тут перегрузка простого метода Добавлено через 3 минуты да я бы мог вобще хоть 100 способов придумать в каких местах и как еще до записи или вывода отредактировать данные в нащадке перегружая метод записи вывода который написан в отце. Но в задании сказано так продемонстрировать, как можно изменять формат хранения данных в файле без внесения изменений в функционал классов Student, StudentsBD. Для этого описать класс StudentManipulation как базовый, и реализовать один или несколько классов потомков с перегруженными вариантами записи \ чтения данных. Один из потомков в своих методах может использовать перегружены операции >> и << ввода \ вывода объектов класса Student в файл. да я без обьектов чтение сделал а только запись в которой не записивается обьект сам а кидается в стринг переменную его содержимое дак что стринг
0
|
||
| 30.10.2014, 20:51 | |
|
0
|
|
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
||
| 30.10.2014, 22:02 [ТС] | ||
|
в переводе потомок Добавлено через 1 час 5 минут жаль так ответа и не получил)
0
|
||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 30.10.2014, 22:11 | |||
|
Вот это нужно сделать:
0
|
|||
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|||||||
| 30.10.2014, 22:22 [ТС] | |||||||
Добавлено через 2 минуты вот и говорю перегружаю в потомке, потом создаю обьект потомка и вызиваю унаследованый метод вывода, но выводит без редактирования тоесть без перегрузки которую я описал в чилде который и вызвал(
0
|
|||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||
| 30.10.2014, 22:27 | ||||
|
0
|
||||
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|||||||
| 30.10.2014, 22:50 [ТС] | |||||||
0
|
|||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 30.10.2014, 22:55 | |||
|
Пустой разговор. Ясновидящих нет, кода мало (и то такой, то уже другой), запутанных вопросов много. Прогноз неблагоприятный.
0
|
|||
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|||||||||||||||||
| 30.10.2014, 23:15 [ТС] | |||||||||||||||||
по идее должно добавлять пустое место ибо в перегрузке v=""; но добавляет нормально типа то что передается, тоесть перегрузка не приисходит. может дело в том что она ввобще не вызивается. брекпоинт в ней ставил дебажил, проходит мимо ее
0
|
|||||||||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 30.10.2014, 23:30 | ||
|
0
|
||
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|
| 30.10.2014, 23:51 [ТС] | |
|
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||||||||||||||||||
| 31.10.2014, 00:51 | ||||||||||||||||||||||
Сообщение было отмечено Lynatik001 как решение
РешениеВо-первых, вы пытаетесь перегрузить операторы вывода для аргументов типа 'fstream' и 'string'. Это оператор уже перегружен в стандартной библиотеке. Даже если вы все сделаете правильно, подобные развлечения только приведут к неприятным последствиям в будущем. Кто-то захочет вызвать стандартный оператор, в попадет на ваш. Лучше прекратите это безобразие. Во-вторых, ваш код, похоже, страдает от того, что вы не понимаете, как работает friend-объявление. (Это неудивительно, так как вещь это весьма неинтуитивная.) Friend-объявление функции, которая как известно располагается внутри класса, но функция из этого friend-объявления членом класса не является. Эта функция будет располагаться снаружи класса, в пространстве имен, в котором сидит класс. Но friend-объявление само по себе не вводит в это наружное пространство имен объявления этой функции. Посмотрите на этот пример
Однако, несмотря на то, что мы определили функцию '::foo(int)', в этом примере из функции 'main' будет вызываться функция '::foo(double)'. Почему? А потому, что несмотря на то, что friend-объявление определяет глобальную функцию '::foo(int)', за пределами класса '::foo(int)' является "невидимой". 'main' ничего не знает о существовании '::foo(int)' и поэтому вызывает '::foo(double)'. Для того, чтобы '::foo(int)' стала видимой снаружи класса 'S', ее надо там снаружи явно объявить (можно до класса, можно после - это не важно)
То же самое происходит в вашем примере. Вы объявили глобальные функции-друзья в классе 'Child'
Но, еще раз повторяю, ваша попытка "захватить" стандартный оператор добром не кончится. P.S. Это правило (про необходимость внешнего объявления) условно "отменяется" в тех ситуациях, когда хотя бы один из аргументов friend-функции имеет тот же тип, что и охватывающий класс. Тогда на помощь приходит специальный механизм, известный как argument-dependent lookup (ADL). Этот механизм найдет friend-функцию даже если она не объявлена снаружи класса. Но в вашем случае ADL помочь не может, потому что ни один из аргументов ваших friend-функций не имеет тип 'Child'. Поэтому в вашем случае внешнее объявление обязательно.
1
|
||||||||||||||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 31.10.2014, 01:25 | |||
|
Всё правильно, но в 18 посте (и в 30) выложен код:
0
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||||||
| 31.10.2014, 01:29 | |||||||
|
В программе в разнообразные посторонние единицы трансляции (в другие .cpp файлы) будет включаться именно .h файл. Эти посторонние единицы трансляции ничего не знают о вышепроцитированном .cpp файле. Все, что видят посторонние единицы трансляции - это .h файл, в котором сказано
Именно в .h файле (!) дополнительно должны быть сделаны наружные объявления этих функций, как я показывал выше. Определения пусть остаются в .cpp файле, как сейчас. Его менять не надо. А вот в .h файл наружные объявления надо добавить.
0
|
|||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 31.10.2014, 01:36 | |||
|
Добавлено через 3 минуты Я к тому, что:
0
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 31.10.2014, 01:44 | ||
|
В 30-м посте функции определены прямо в .h файле. Эти функции - не inline, и не шаблоны. Если такой .h файл включить в несколько .cpp файлов проекта, то компиляция проекта не пройдет - она накроется на стадии линковки из-за множественного определения функций. Спрашивается: каким образом ТС умудрился это скомпилировать? И компилировал ли ТС это вообще? (По 30-му посту, кстати, хорошо видна порочность всей затеи, о которой я говорил ранее. Строчка 'fstr << v' будет вызывать рекурсивно все тот же 'operator <<'. Т.е. эта реализация бесконечно рекурсивна.) Скорее всего, ТС не включал свой .h файл даже туда, где он нужен. Я не вижу включения 'Child.h' нигде в посте 30. Поэтому его проект успешно компилировался (несмотря на определения функций в .h файле), а перегруженные версии операторов не вызывались.
0
|
||
| 31.10.2014, 01:49 | |
|
0
|
|
|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
||
| 31.10.2014, 02:21 [ТС] | ||
|
вот он ответ, спасибо, а то что-то все вдруг запутались) и на 2 страницы ростянулась непонятница) не стану проверять, забыл на это и перегрузил просто методы
Добавлено через 26 минут
0
|
||
| 31.10.2014, 02:21 | |
|
Использование переменных базового класса в дочернем классе Не могу в дочернем классе вызвать protected метод Изменение информации в дочернем классе, через ссылку
перегрузка fstream Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|