|
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
|
|||||||||||
Перегрузка fstream в дочернем классе30.10.2014, 18:01. Показов 3634. Ответов 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
|
||
|
5499 / 4894 / 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
|
|||||||
|
5499 / 4894 / 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
|
|||||||
|
5499 / 4894 / 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
|
|||||||||||||||||
|
5499 / 4894 / 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
|
|
|
Вездепух
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,200
|
||||||||||||||||||||||
| 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
|
||||||||||||||||||||||
|
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 31.10.2014, 01:25 | |||
|
Всё правильно, но в 18 посте (и в 30) выложен код:
0
|
|||
|
Вездепух
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,200
|
|||||||
| 31.10.2014, 01:29 | |||||||
|
В программе в разнообразные посторонние единицы трансляции (в другие .cpp файлы) будет включаться именно .h файл. Эти посторонние единицы трансляции ничего не знают о вышепроцитированном .cpp файле. Все, что видят посторонние единицы трансляции - это .h файл, в котором сказано
Именно в .h файле (!) дополнительно должны быть сделаны наружные объявления этих функций, как я показывал выше. Определения пусть остаются в .cpp файле, как сейчас. Его менять не надо. А вот в .h файл наружные объявления надо добавить.
0
|
|||||||
|
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 31.10.2014, 01:36 | |||
|
Добавлено через 3 минуты Я к тому, что:
0
|
|||
|
Вездепух
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,200
|
||
| 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 | |
|
Помогаю со студенческими работами здесь
38
Использование переменных базового класса в дочернем классе Не могу в дочернем классе вызвать protected метод Изменение информации в дочернем классе, через ссылку
перегрузка fstream Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|