|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 30599. Ответов 421
Метки вопросы наследования (Все метки)
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
собрала... осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа... а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль; б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid... === !! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о: === Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями): чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)... p.s. классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют... p.p.s. вывести конечные интерфейсы с определёнными методами записи на кнопки... === ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ?? === на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы) птицами отмечены уже кое-как реализованные классы (2 птицы) курсивные стрелки - отсутствие наследования ![]() Добавлено через 7 минут вобщем вопрос: class Table и класс I_Tbl_Show - объединить или нет? Добавлено через 10 минут p.p.s. чтобы избежать проблем Ромба и такого: Неоднозначность при множественном наследовании
0
|
||||
| 11.03.2020, 10:51 | |
|
Ответы с готовыми решениями:
421
Проверка двух текстовиков
Сделать скрипт для вывода текстов из текстовиков |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||
| 11.03.2020, 11:04 | ||||||
Сообщение было отмечено JeyCi как решение
Решение
можно как нибудь так + pimpl'ы
1
|
||||||
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
||
| 11.03.2020, 11:10 [ТС] | ||
|
Проблемы с множественным наследованием
Добавлено через 4 минуты zayats80888, спасибо...
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 11.03.2020, 11:13 | ||
|
1
|
||
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
|
| 11.03.2020, 11:18 [ТС] | |
|
0
|
|
| 11.03.2020, 11:21 | |
|
0
|
|
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
|
| 11.03.2020, 11:50 [ТС] | |
значит есть - если указать явно... благодарюp.s. по моему линку по АТД - там даже функции можно сделать...
0
|
|
|
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,682
|
|||||||||||||
| 11.03.2020, 12:29 | |||||||||||||
1
|
|||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 11.03.2020, 13:01 | |
|
1
|
|
|
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,682
|
|
| 11.03.2020, 13:17 | |
|
DrOffset, таки да, разогнался с class/struct, а union имеет более серьёзные отличия от первых
0
|
|
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
||||
| 11.03.2020, 20:56 [ТС] | ||||
|
в 2-х словах отмечу общие нюансы наследования или ненаследования (что отметила для себя):
- 1-е (Конструкция) - это наследование (для передачи свойств и методов потомкам с возможностью реализации в потомках и их собственных свойств и методов - т.е. расширение базового класса); - 2-е (Обобщение) - это создание абстрактных классов... Абстрактные классы - как гарантия того, что в наследниках будут реализованы опр. методы... Абстрактные классы могут иметь, как чистые виртуальные функции, так и виртуальные таблицы, которые могут использоваться, если у вас есть указатель или ссылка на Абстрактный Класс... Множественное наследование не есть хорошо в принципе (особенно, когда у родителей есть общий базовый класс) - т.к. могут в производном появиться 2 и более (в зависимости от того, сколько родителей) экземпляра одного элемента (при ромбовидной структуре наследования)... или просто, когда в классах одноимённые переменные-члены - будет неопределённость... менять имена, договариваться с разработчиками тех классов-родителей, откуда появляется неопределённое поведение, использовать виртуальное наследование... Интерфейсные классы - содержащие только методы - могут иметь множественное наследование - быть используемыми различными базовыми классами... содержат только методы, не имеют полей... (т.е. по сути они абстрактные с виртуальными методами, но без полей)... Дружественные классы, как ещё один способ разрулить ромб, - преобразовать порождение из нескольких классов в порождение из 1-го класса и объявить дружественный(е) класс(ы) === вроде весь арсенал возможных структурных единиц в проектировании... имхо... ещё банально одиночное наследование... и Виртуальные Базовые Классы... Добавлено через 2 минуты === #2 уже буду обкатывать в коде - пока без комментариев... в любом случае спасибо, за новые понятия в моём арсенале Добавлено через 6 минут базовый Serializer и его производные DataGridSerializer и CSVSerializer - вижу... Добавлено через 1 час 49 минут да и здесь на форуме - Как правильно реализовать множественное наследование? - примеры и вложения последних постов о том, как обрабатывает множественное наследование сам компилятор ... хотя по скрину начала топика - у нас его пока нет... но мало ли потом появится... Добавлено через 4 минуты P.S. там на скрине верхние классы copy-paste'ом делала - поэтому методы одинаковые от базового кл. ... конечно, же правильнее нарисовать внутри потомков соотв. методы... но исправить уже не смогу - просто для инфо Добавлено через 18 минут и Проектирование в общем и целом: - Определение иерархии классов - Идентификация членов иерархии и здесь:
0
|
||||
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
|||
| 12.03.2020, 20:32 [ТС] | |||
|
- точнее - всё та же наша собранная таблца Class Table (на скрине) с функцией обращения к I_tbl_Show (Абстрактный класс), 'virtual void оператор<<' которого переопределяется далее в соотв. производных интерфейсных классах... p.s. Вобщем, что никакого множественного наследования и никаких виртуальных классов (виртуального наследования) для урегулирования ромба (его тем более нет)... только чистая виртуальная функция Абстрактного класса Serializer... p.p.s. Урок №168. Чистые виртуальные функции, Интерфейсы и Абстрактные классы всё-таки ещё виртуальные таблицы стоит иметь ввиду ДЛЯ позднего связывания, т.е. НЕ на этапе компиляции, насколько понимаю... Урок №167. Виртуальные таблицы Кликните здесь для просмотра всего текста
-- только ещё понять остаётся, как ими пользоваться и надо ли?... - в чём выгода??... - если всё равно всё компилируется и компилятор сам расставляет всё по своим местам, независимо от того раннее или поздне связывание - связывает как надо и можно забыть об этом, пользуясь Release'ом разработанного приложения... но всё-таки, мне кажется, в разработке интерфейсных классов в DLL и/или COMdll - эти вирт. таблицы стоит иметь ввиду? -- хотя там, в принципе, сама библиотека ATL всё имеет ввиду -- только птиц где-то проставить надо в начале разработки... - вопрос снят
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 13.03.2020, 11:40 | |
|
JeyCi, вам не понятно зачем виртуальные таблицы или зачем полиморфизм в целом нужен?
Виртуальные таблицы - это технический аспект реализации полиморфизма всего лишь.
0
|
|
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
||
| 13.03.2020, 19:16 [ТС] | ||
|
вот когда использовать виртуальные таблицы - вероятно, когда мне нужно позднее связывание... НО я могу понять, что мне может быть нужно реализовать его, например, в dll или COMdll. т.к. ковыряла надстройку в Borland'e (кстати очень понравилась IDE, только старая и не все библы есть, а на RAD Studio ещё не перешла - там регистрация в Community нужна)... но не могу понять, если application создаётся на чистом С++, мы компилируем и забываем о нами написанном коде (т.к., вероятно, компилятор делает все нужные ему name mangling (also called name decoration), и/или даже вообще переводит код в ассемблер)... вобщем стоит ли мне в коде на чистом С++ использовать позднее связывание -- оно медленнее раннего, но ? отразится ли на конечном Build'e appl'a... и есть ли хоть какая выгода в позднем связывании, кроме его использования в, например, интерфейсе, реализованном в надстройке на С++, но используемом, например, в Excel -- там в принципе, часто подключаем библу поздним связыванием и это просто удобно... т.е. не-совсем-понимание, наверно, КОГДА стоит заворачиваться в коде на указателях на эти виртуальные таблицы? (если писать appl на чистом C++) - ГДЕ от этого будет Profit?
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 13.03.2020, 19:25 | ||
|
1
|
||
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
|
| 13.03.2020, 19:46 [ТС] | |
|
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 13.03.2020, 19:50 | |
|
1
|
|
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
|||
| 14.03.2020, 12:07 [ТС] | |||
|
хм, просто подумала, что вызов виртуальной функции класса и вызов простого метода класса - примерно одинаково по синтаксису можно использовать...
Ссылка на метод класса Как получить указатель на метод объекта? (и виртуальные вызывать можно также подумала) + __vptr сама по себе -
![]() p.s.
Добавлено через 7 минут p.p.s. Указатели на функции-члены и реализация самых быстрых делегатов на С++.
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 14.03.2020, 12:31 | ||
|
Виртуальные таблицы используются неявно. Компилятор генерирует соответствующий код с их использованием. Добавлено через 6 минут JeyCi, вообще мне кажется вы путаете реализацию и собственно язык. Для того, чтобы программировать на С++ в обычных условиях не нужно знать о каких-то там виртуальных таблицах. Их вообще в стандарте языка нет. Т.е., теоретически, в какой-то реализации вообще может не быть этих таблиц нигде, а полиморфизм, RTTI будут реализованы как-то по-другому (хотя на практике я лично с таким не сталкивался). В этой статье, которую вы выше скидывали, эти таблицы поданы почему-то как языковая фича, хотя это фича реализации языка, а не самого языка. Очень важно понимать эту разницу. Поэтому ваше сосредоточение на реализации в данный момент не оправдано.
0
|
||
|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
||
| 14.03.2020, 13:12 [ТС] | ||
|
* или & ставить или нет, обращаясь к методу?.. что более memory-efficient? (а в этом контексте и реализация не маловажна... имхо)
0
|
||
| 14.03.2020, 13:12 | |
|
Помогаю со студенческими работами здесь
20
В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников Ошибка "в указанном dsn архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|