|
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 30531. Ответов 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 архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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. . .
|