Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/56: Рейтинг темы: голосов - 56, средняя оценка - 4.63
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Считать текстовые файлы из папки

23.02.2020, 13:04. Показов 12005. Ответов 75
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
только начинаю знакомиться с языком...
вывела в консоль все пути так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <fstream>
#include <dirent.h>
#include <cstdio>
#include <string>
 
using namespace std;
 
int main(int argc, const char *argv[])
{
    DIR *dir;
    struct dirent *entry;
    
    const char *p = "E:\\NEW docs\\";
    int* szp= new int(strlen(p));
    std::cout << *szp << std::endl;
 
    if ((dir = opendir (p)) != NULL) {
      /* print all the files and directories within directory */
      while ((entry = readdir (dir)) != NULL) {
        char* n;
        n=entry->d_name;
 
        int* szn= new int ((strlen(n))+*szp+1);
        //std::cout << *szn << std::endl;
            
        char* slovo = new char[*szn];
        strcpy( slovo, p);
        strcat(slovo, n);
        std::cout << slovo << std::endl;
 
        delete[] &slovo;
        delete &szn;
      }
      closedir (dir);
    } else {
      perror ("");
      printf("error");
      return EXIT_FAILURE;
    }
       delete &szp;
       delete[] &p;
 
    return 0 ;
}
как-то длинно получилось...
а ещё и содержимое файлов хочется вывести в консоль... можно ли как-то короче?.. взять в вектор и пробежавшись по нему вывести содержимое в консоль?..
(и ? есть ли возможность быстро и асинхронно их считывать - т.к. потом планируется их запуск на обработку)

Добавлено через 6 минут
и кириллица не норм - как выводить норм рус.яз ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2020, 13:04
Ответы с готовыми решениями:

Определить строки этого файла, содержащие максимальную по длине подстроку, состоящую из одинаковых символов
вот задание для программы: 6. Задан текстовый файл input.txt. Требуется определить строки этого файла, содержащие максимальную по длине...

Как считать все текстовые файлы с папки
Как считать все текстовые файлы с папки

Вывести все текстовые файлы из папки в выпадающий список
Здравствуйте ув. web разработчики. Столкнулся с проблемой:wall:. Есть папка Data\ в ней файлы *.txt как вывести все файлы txt в список...

75
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.03.2020, 18:04  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Recrut_rf Посмотреть сообщение
наследование создаёт самую "сильную" связь между классами.
вот не хочется оффтопить в ветке - но выскажу и свой view (сформировавшийся на данный момент из разных ресурсов) - раз уж затронули такой нюанс и надо начинать знакомиться с языком и его возможностями...
Отношения между классами и объектами
При проектировании отношений между классами надо учитывать некоторые общие рекомендации. В частности, вместо наследования следует предпочитать композицию. При наследовании весь функционал класса-наследника жестко определен на этапе компиляции. И во время выполнения программы мы не можем его динамически переопределить. А класс-наследник не всегда может переопределить код, который определен в родительском классе. Композиция же позволяет динамически определять поведение объекта во время выполнения, и поэтому является более гибкой.
В то же время:
строгая Композиция в языках с автоматическим управлением памятью вообще невозможна, т.к. "часть" не может быть удалена во время удаления "целого"
-- насколько понимаю, как раз возможность оперировать указателями в С++ -- даёт всё необходимое для полноценного ООП (не то что VBA)...
4 св-ва ООП (Павловская Т.А.)
1. Наследование - это возможность создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые.
2. Выделение общих черт различных классов в один класс-предок является мощным механизмом Абстракции.
3. Полиморфизм - возможность использовать в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.
4. Объединение данных с функциями их обработки в сочетании со скрытием ненужной для использования этих данных информации наз. Инкапсуляцией

НО Также понравилось:
Любую проблему можно решить введением доп. абстрактного слоя, за исключением проблемы слишком большого количества абстрактных слоёв
- поэтому вводить ли ещё один user-defined Класс в придачу к уже имеющимся Классам в std -- полагаю, стоит в случае действительной необходимости (а не тупо по учебникам про ООП)... - т.е. когда, действительно, надо выстроить иерархию (и даже не по примерам из учебников, а зачастую совсем по иным уровням абстракции, aka типизация данных, контейнеры и др. используемые железом понятия, а не понятия человека - ведь с кодом будет работать железо -- мне кажется такой взгляд более Pro. чем примеры из книг, которые скорее обучающие, или для написания игр подходят)... ну да практика покажет...
поскольку Также понравилось:
важно до начала проектирования правильно определить, требуется ли вообще применять ООП. Если в иерархии классов нет необходимости, достаточно ограничиться модульной технологией, при этом можно использовать, как классы std, так и классы своей разработки
- опять же чтобы жёсткие связи Наследования не фиксить во время компиляции, а оставлять гибкости юзеру... хотя пока сам разрабатываешь и все исходники всегда под рукой - то можно и перекомпилировать, если вносишь изменения... пока не доработаешь всю Release-версию (удалив все заглушки в начальном дизайне)
3-й принцип SOLID, как проверка на то, стоит ли использовать наследование
... может иногда можно и просто wrapper создать над имеющимися классами... и этого может быть достаточно... имхо
P.S.
в любом случае - начинать надо с дизайна Архитектуры... но даже перегрузка функций и использование (создание) шаблонов, насколько знаю, даёт возможность реализовать Полиморфизм (не только наследование обеспечивает его)... поэтому "не надо делать сложное из простого там, где эти сложности не нужны" - к слову об упрощении взгляда на книжки и на свой собственный код... полагаю, тогда и дорабатывать будет легче, если в будущем возникнет такая необходимость... - главное: не усложнять на нач. этапе!!! поэтому и ищу простые и быстрые кодовые ходы, и желательно краткие...
а вот
Цитата Сообщение от DrOffset Посмотреть сообщение
Книжки есть отличные. Именно в духе разных советов по ситуациям.
- этим стоит уделить внимание... если ещё и названия и авторы у них есть ??
P.P.S.
И описывать Классы и функции лучше в .h-файле... чтобы не загромождать .cpp-файл... тогда вообще читабельность улучшается
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
05.03.2020, 18:21
Цитата Сообщение от JeyCi Посмотреть сообщение
если ещё и названия и авторы у них есть ??
Герб Саттер, Андрей Александреску, -"Стандарты программирования на С++".
Скотт Майерс, - "Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ".
Стивен Дьюхэрст, - "Скользкие места С++. Как избежать проблемы при проектировании и компиляции ваших программ".
Скотт Майерс, - "Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14".
Герб Саттер, - "Решение сложных задач на С++".
Герб Саттер, - "Новые сложные задачи на C++".

Добавлено через 10 минут
JeyCi, список есть в этой теме: Литература C++
1
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
05.03.2020, 18:26
JeyCi, извините конечно же но в этом вашем посту всё как то сумбурно (видимо на эмоциях :D) описано, местами с откровенными ошибками

во первых:
Цитата Сообщение от JeyCi Посмотреть сообщение
насколько понимаю, как раз возможность оперировать указателями в С++ -- даёт всё необходимое для полноценного ООП
извините - но за такую ересь в средние века на костре сжигали
В Си указатели появились за долго до плюсов и никакого ООП там и рядом нет.

А вот это:
Цитата Сообщение от JeyCi Посмотреть сообщение
строгая Композиция в языках с автоматическим управлением памятью вообще невозможна, т.к. "часть" не может быть удалена во время удаления "целого"
Это вы к чему, если вы хотите программировать на С++, то всё, что касается автоматического управления памятью - "идёт лесом". Читайте про деструкторы (которых как раз таки нет в языках с автом. управлением памятью - они там попросту ненужны) и конструкторы.

Цитата Сообщение от JeyCi Посмотреть сообщение
но даже перегрузка функций и использование (создание) шаблонов, насколько знаю, даёт возможность реализовать Полиморфизм
частично - да, но это такой - своеобразный полиморфизм. Шаблоны - да, могут, если речь идёт о шаблонных классах. Но Шаблоны сами по себе - это отдельная "мега" тема, которую ещё иногда называют метапрограммирование. По сути - шаблонные классы - это такие же классы, для которых доступно наследование, а значит и все его плюшки. И вообще в них своих заморочек полно.

Цитата Сообщение от JeyCi Посмотреть сообщение
поэтому вводить ли ещё один user-defined Класс в придачу к уже имеющимся Классам в std
Вот эту фразу вообще не понял...

Цитата Сообщение от JeyCi Посмотреть сообщение
тогда и дорабатывать будет легче, если в будущем возникнет такая необходимость... - главное: не усложнять на нач. этапе!!! поэтому и ищу простые и быстрые кодовые ходы, и желательно краткие...
а вот
Дорабатывать будет легче, в том случае, если у вас как раз таки прекрасные знания в ООП и немаленький опыт.
Извините, но без этого - ваш любой сколь-нибудь большой проект скорее всего скатится (без обид ) в банальный говнокод. Нужно, чтоб кто-нибудь из опытных программистов (желательно со знаниями и опытом применения паттернов проектирования) постоянно мониторил, что вы делаете и давал дельные советы. Иначе - никак. Разве, что на своих ошибках учиться.
Цитата Сообщение от JeyCi Посмотреть сообщение
описывать Классы и функции лучше в .h-файле.
Классы - да, функции - нет (разве что "мелочь" всякую, которая подойдёт как inline).
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.03.2020, 19:21  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Стивен Дьюхэрст, - "Скользкие места С++. Как избежать проблемы при проектировании и компиляции ваших программ".
вот особенно эту полистаю - и если не права в своём предыдущем посте - изложу новый view... но, наверно, уже лучше в др. ветке...
в любом случае - всем спасибо за конструктивный диалог... - когда он не скатывается в offtop

Добавлено через 52 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
если не права в своём предыдущем посте - изложу новый view...
но пока, честно говоря, не вижу оснований сильно придумывать какие-то новые классы, если уже имеющиеся в std и upp(Core.h) - могут запросто обеспечить мои подзадачи в рамках ТЗ "загрузить в БД - выгрузить из БД", причём бд не в сети... может это ещё моя привычка из vba думать в стиле процессуального программирования, а не оо-программирования... ?но зачем создавать новые классы (строить Карфаген), если те, которые имеются - уже достаточны... я не завидую тем, кто не использует уже имеющиеся библы (с классами уже в них заложенными) в языке... любом...
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
05.03.2020, 19:25
JeyCi, Стив Макконел - совершенный код 2е издание (возможно уже более новое появилось - не знаю точно), очень рекомендую эту книгу. В ней как раз описано как грамотно проектировать программы.

Цитата Сообщение от JeyCi Посмотреть сообщение
зачем создавать новые классы, если те, которые имеются - уже достаточны
Для грамотной архитектуры. Почитайте про модель-представление, поймёте о чем я говорю.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.03.2020, 19:49  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Почитайте про модель-представление, поймёте о чем я говорю.
вот недавно уже обсуждали -- во-первых её используют для сетевых разработок и с серверами... во-вторых уже даже там -- ajax больше в моде, чем MVC...
и сюда заглядывала по рефакторингу... понадобится - ещё загляну...
но пока - говорю же - мне не Карфаген нужен, а под home pk... всё проще, чем вам кажется (с уже имеющимися возможностями языка)... - мне для этих целей SQL хваает... поскольку выгружаются данные тоже текстовиками для использования в др. софте... просто загрузку из json'ов, тоже сторонних, не моих, - хочется сделать быстрее, чем в PQ... и более memory-efficient!..
p.s.
ввиду разнообразия входящих файлов - про классы подумаю, поскольку структурами, видимо, обойтись не удастся, т.к. надо будет ещё join'ить json'ы, а в С# и его LINQ лезть не хочется - т.к. у него JIT-компиляция... хочется сразу откомпилированный код - поэтому выбор - c/c++

Добавлено через 5 минут
еорнеоао
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
05.03.2020, 19:49
Цитата Сообщение от JeyCi Посмотреть сообщение
вот недавно уже обсуждали -- во-первых её используют для сетевых разработок и с серверами... во-вторых уже даже там -- ajax больше в моде, чем MVC...
говорю же - мне не Карфаген нужен, а под home pk... всё проще, чем вам кажется
Какие сети , вы очём? Нет, серьезно, причем здесь какой-то
Цитата Сообщение от JeyCi Посмотреть сообщение
ajax
я вообще не понимаю что это такое .

Цитата Сообщение от JeyCi Посмотреть сообщение
говорю же - мне не Карфаген нужен, а под home pk... всё проще, чем вам кажется
успокойтесь , сейчас объясню - модель представление можно хоть под хеллоу ворд использовать. Это по сути основа основ грамотного проектирования (в Qt - это если что библиотека такая для С++ (скорее даже фреймворк со своей средой разработки) используется на полную катушку). Суть в следующем - вы создаёте класс, который выводит меню (допустим, если это консоль, то что-нибудь в духе - введите 1 чтобы посмотреть данные, 2 - чтобы записать данные, в общем - что хотите) и отдельно класс, где будет отрабатываться логика программы - искать нужные данные в файле, базе данных, возможно что-то считать, в общем эта часть зовется бизнес логикой. Идея всего этого заключается в том, что при грамотной разработки второго класса (который - бизнес логика) - его можно прикрутить к любому интерфейсу, к консольному, к виндовским окнам и т. д.
А вот если вы сделали свой класс - и в нем, наряду с какими-то расчётами или, к примеру, манипуляциями с данными, определили функцию вывода этих данных скажем в туже консоль - это уже не правильный подход. Потому что вы заранее определили возможность работы исключительно с консолью.
Правильный подход - разработать функцию, которая будет предоставлять данные для отображения. А за представление этих данных должен отвечать другой класс.
Как то так.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.03.2020, 20:19  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
А вот если вы сделали свой класс - и в нем, наряду с какими-то расчётами или, к примеру, манипуляциями с данными, определили функцию вывода этих данных - это уже не правильный подход.
я в курсе:
Model - отдельно,
View - отдельно (т.е. отдельные сущности),
а для взаимодействия между ними Controller - функция/интерфейс/API (вывести - не вывести, показать - не показать, как вы написали)...
... но мне просто распарсить надо и грубо говоря в Model (бизнес-логику) забросить те json'ы, которые по сути своей условно можно назвать View (обыкновенные текстовые файлы)... взаимодействие между Model и View - двунаправленное (туда-сюда можно, так вот мне туда надо)...
вот Controller и пытаюсь наваять на новом мне языке - c/c++...
как-то так...
p.s.
честно говоря взаимдействие сервер-клиент через интерфейс -- схема такая же по сути...
и ещё совет помню по проектированию "сначала выделите каждую сущноссть в класс"... а потом дальше, как нравится...
p.p.s.
- как ни назови, а Указатели на поля и методы Класса, в который уже распарсила (на скорую руку) - буду дальше разбирать... т.к. из обобщающего класса (условно Group) как-то на класс (условно Element) пока выйти не могу - чтобы Add в общий vector всех... а сижу тут и с вами болтаю ...
== спасибо за архитектуру (надеюсь, я правильно здесь изложила суть того, что делаю), но завтра уже надо к Указателям и Памяти возвращаться, которую вчера выделяла под каждый распарсенный element, а за сегодня так и не собрала эти все объекты этого класса в group class...
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
05.03.2020, 20:21
Цитата Сообщение от JeyCi Посмотреть сообщение
но мне просто распарсить надо и грубо говоря в Model (бизнес-логику) забросить те json'ы, которые по сути своей условно можно назвать View
ахахаха - мы тут про указатели, ООП, грамотную разработку на три листа наболтали, а цель - всего-то распарсить.

Я вообщем, вообще беспонятия как JSON парсить (но с данными в таком виде работал, правда на Jave). Нашли бы библиотеку или пример какой в интернете - для С++ и всё - Profit
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.03.2020, 20:29  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
и всё - Profit
так уже ж распарсила 1 файл... (но с указателями не уверена - завтра снова в ликбез)...
из др класса на элементы этого класса пока ещё не достучалась... вобщем надо к теме возвращаться - Указателей ! на объекты класса и его методы...
0
05.03.2020, 20:39

Не по теме:

JeyCi, тогда - удачи, если будут вопросы спрашивайте, лучше в отдельной теме - отдельный вопрос.

0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
06.03.2020, 10:42  [ТС]
Кликните здесь для просмотра всего текста
Цитата Сообщение от JeyCi Посмотреть сообщение
Controller - функция/интерфейс/API
внесла изменения в предыдущий пост - благодаря Recrut_rf подобраны более точные формулировки...
хотя интерфейс - это тоже по сути Класс может быть условно, только без полей, но с методами... (поэтому объекты не создаёт, но создаёт instances, aka экземпляры - как-то так)
Интерфейсы
Отличия абстрактного класса от интерфейса
линк
ru_stackoverflow_com [_ на .] /questions/235352/%D0%9E%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D1% 8F-%D0%B0%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0% BA%D1%82%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0-%D0%BE%D1%82-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0% B5%D0%B9%D1%81%D0%B0-abstract-class-and-interface"]

Интерфейс против абстрактного класса (общий OO)
== вобщем:
"один и тот же интерфейс может реализовать классы, у которых вообще нет ничего общего.".
т.е. "интерфейсы могут быть множественными наследуемыми, абстрактные классы не могут "... - все нюансы по линкам...
и вообще в новую тему (если будут вопросы)

==
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
06.03.2020, 17:52
Цитата Сообщение от JeyCi Посмотреть сообщение
т.е. "интерфейсы могут быть множественными наследуемыми, абстрактные классы не могут "
Просто оставлю здесь примерчик:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
 
using namespace std;
 
 
class Abstract1
{
public:
    virtual void someFunc() = 0;
};
 
 
void Abstract1::someFunc()
{
    cout << "Я есть абстрактный класс1\n ";
}
 
class Abstract2
{
public:
    virtual void someFunc() = 0;
};
 
void Abstract2::someFunc()
{
    cout << "Я есть абстрактный класс2\n ";
}
 
 
class MyClass : Abstract1, Abstract2
{
public:
 
    void someFunc()
    {
        Abstract1::someFunc();
        Abstract2::someFunc();
        cout << "Я есть просто класс\n ";
    }
};
 
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    MyClass myClass;
    myClass.someFunc();
 
    system("pause");
    return 0;
}
Добавлено через 21 минуту
и ещё один

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
 
using namespace std;
 
 
class Abstract1
{
public:
    virtual void someFunc() = 0;
};
 
 
void Abstract1::someFunc()
{
    cout << "Я есть абстрактный класс1\n ";
}
 
class Abstract2 : public Abstract1
{
public:
    virtual void someFunc() = 0;
};
 
void Abstract2::someFunc()
{
    cout << "Я есть абстрактный класс2\n ";
}
 
 
class MyClass : Abstract2
{
public:
 
    void someFunc()
    {
        Abstract1::someFunc();
        Abstract2::someFunc();
        cout << "Я есть просто класс\n ";
    }
};
 
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    MyClass myClass;
    myClass.someFunc();
 
    system("pause");
    return 0;
}
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
07.03.2020, 11:20  [ТС]
судя по отсутствию полей - то был примерчик интерфейсов?...
(хотя в С++ нет синтаксического различия, помимо возможности в имени добавлять ImyClass)
===
по промежуточным выводам ветки - разобрались:
Урок №80. Указатели
Урок №79. Строки C-style
Правило: Используйте std::string вместо строк C-style.
по дизайну архитектуры:
Урок №168. Чистые виртуальные функции, Интерфейсы и Абстрактные классы
class IDatabasePut для вывода в файл, на консоль, и допустим в бд
Любой класс, который наследует IDatabasePut, должен предоставить свою реализацию всех трёх методов класса IDatabasePut
... таким образом выкинем куда надо то, что считали - выкинем через интерфейс:
Интерфейс — это класс, который не имеет переменных-членов и все методы которого являются чистыми виртуальными функциями! Интерфейсы ещё называют «классами-интерфейсами» или «интерфейсными классами».
выкидывать надо полную таблицУ распарсенных 420 файлов
=== поэтому полагаю,
class Record... с учётом того, что файлы могут быть разные по структуре (3 вида) - значит 3 класса на 3 вида файлов - каждый класс для формирования объектов с нужными полями...
+
class theTable - для формирования вектора всех объектов;
ВАЖНО: его поля - содержат все поля 3х разных видов файлов;
в классе метод Search для join'a 3х видов файлов - с проверкой маски имени файла для обработки в нужном классе с соотв. typeid(x).name ... (хотя в реале разные типы файлов лучше хранить в разных папках и считывать соотв. классами)...
===
- осталось собрать всё вместе и реализовать... полагаю тут Наследования никакого не пригодится?
===
?? или может быть, какая-то более быстродействующая архитектура? знаю, что каждый архитектор думает по-своему...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.03.2020, 09:32  [ТС]
не могу не отметить хорошее описание SOLID-принципов - после прочтения чего всё становится на свои места в вопросах дизайна архитектуры!
Согласно Фаулеру «дублирование кода свидетельствует об упущенной возможности для абстракции»
- теперь понятно, о чём писал Recrut_rf, напоминая об Архитектуре...
Таким образом,
- написав на std С++ (включая использование <string>) со временем для ускорения можно будет отдельные классы/модули переписать на С малыми затратами времени (поскольку всё-таки С может быть быстрее), если уже сейчас разработать правильную Архитектуру - т.е. выделить нужные уровни абстракций и связей между ними (или IS-A [наследование], или HAS A [композиция, агрегация])... реализации приложатся со временем...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
11.03.2020, 12:01  [ТС]
и тем не менее:
для обобщения в языке C++ вводится отдельное понятие — абстрактный класс.
Кликните здесь для просмотра всего текста
Чаще всего абстрактные классы используются в рекламных целях. Если вам нужно представить программу в какой-либо презентации, то добавление абстрактного класса дает возможность сделать красивую картинку типа этой. Поэтому широко распространено использование абстрактных классов при защите диплома или диссертации. Это позволяет подать проект в более солидном виде.
==
В некоторых книгах по C++ приводится такой аргумент по использованию абстрактных классов: в начале разработки программы программист не знает, что может понадобится. Поэтому нужно создать абстрактный класс на всякий случай, а потом можно будет легко переопределить его методы под любую задачу. Поэтому абстрактные классы якобы повышают «гибкость» разработки.

Множественное наследование критикуется за следующие проблемы
Кликните здесь для просмотра всего текста
Множественное наследование критикуется за следующие проблемы, возникающие в некоторых языках, в частности, C++:
семантическая неопределённость часто совокупно представляется как Проблема ромба[4].
отсутствует возможность непосредственного многократного наследования от одного класса.
порядок наследования изменяет семантику класса. Конструктор дочернего класса вызывает конструкторы непосредственных родителей, а те, в свою очередь — конструктор прародителя. Однако прародительский объект имеется в единственном экземпляре и конструировать его дважды нельзя, поэтому сработает вызов конструктора прародителя только конструктором первого родительского класса в списке наследования.

Множественное наследование в языках с конструкторами в стиле C++/Java усиливает проблему наследования конструкторов и последовательностей конструкторов, таким образом создавая проблемы с поддержкой и расширяемостью в этих языках. Объекты в отношениях наследования со значительно отличающимися методами конструирования довольно трудны для реализации в рамках парадигмы последовательности конструкторов.

Тем не менее, существуют языки, обрабатывающие эти технические тонкости (например Eiffel).

Существует мнение, что множественное наследование — это неверная концепция, порождённая неверным анализом и проектированием. В частности, для приведённого выше примера справедлив следующий вариант проектирования. Класс Person включает в себя один и более объектов класса Profession. Классы Student и Musician наследуют от Profession. Таким образом, StudentMusician будет представлен объектом класса Person содержащим объекты класса Student и Musician. Формально множественное наследование можно перепроектировать путём введения класса, являющегося «метаклассом» классов, от которых должно происходить множественное наследование. В приведённом примере таким метаклассом является Profession — профессия.

Стоит ли использовать множественное наследование?
Кликните здесь для просмотра всего текста
... к вам подходит коллега и говорит:
— Слушай, я унаследовал твой класс и класс Угрюмова. И получил алмаз смерти. Иди и решай с Угрюмовым проблему неоднозначности.
Как вы понимаете ответить этому программисту хочется только одно:
— А может ты не будешь наследовать мой класс?!
== Для подобных случаев в стандарт C++ 11 добавлен спецификатор final, который запрещает наследовать данный класс.

==
в языках программирования Objective-C, Java и C#, которые были предложены на смену C++, от множественного наследования отказались.


Добавлено через 25 минут
... или trick для С++ (для обхода проблемы Ромба, видимо)
В ситуациях, когда производный класс более одного раза, косвенно наследует один и тот же базовый Класс, появление 2х копий базового класса в объекте производного класса можно предотвратить, если базовый класс наследуется как виртуальный для всех производных классов.
В этом случае перед спецификатором доступа базового класса необходимо поставить ключевое слово virtual...
... и таблицу виртуальных методов прописать в наследникЕ (-АХ)... о чём в принципе в #53 и #54 уже указали

Добавлено через 4 часа 22 минуты
под спойлером по С# поторопилась
Многие, относительно современные языки, такие как Java и C#, ограничивают классы одиночным наследованием обычных классов, но допускают множественное наследование интерфейсных классов
Большинство задач, решаемых с помощью множественного наследования, могут быть решены и с использованием одиночного наследования. Многие объектно-ориентированные языки программирования (например: Smalltalk, PHP) даже не поддерживают множественное наследование.
... вобщем, об этом множественном наследовании - в др. ветке...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
23.03.2020, 08:45  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Для грамотной архитектуры. Почитайте про модель-представление
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Какие сети , вы очём?
оставлю линки на случай, если всё-таки MVC захочется переносить на web:
Create the View (UI)
Add Models and Controllers
The controllers will use Entity Framework to communicate with the database layer.
- но это лишь рекомендации по Entity Framework и bootstrap - для разработки web-приложения -- чисто технические моменты... не суть самой MVC, но её возможная реализация... на др. яз - C#...
если потом переносить проект в web - то стоит иметь ввиду...
===
но для начала, действительно дизайн архитектуры front-end'a и back-end'a продумать... по сути уточнение деталей общей схемы MVC

Добавлено через 6 минут
Tutorial: Get Started with Entity Framework 6 Code First using MVC 5 - хотя, как уже говорила, сейчас ajax больше в моде..

Добавлено через 25 минут
и в MVC, и в WebAPI есть смысл
Модель-представление в Qt

Добавлено через 23 минуты
поэтому для моей задачи в целом - по сути:
model - это сторонние входящие jsons.
controller_Context - это их собирание в нужную структуру таблицы из нескольких запросов join'ом 3-х видов файлов входящих... можно на стороне сервера, т.к. даже C# LINQ to Json всё равно не будет быстрее, чем нормальный движок БД (не MS Access).
view_Context - отдача представления: в DB, or Console, or Csv_File... ну DB ещё доработать, как сущность (чтобы в ней задачи контроллера реализовать, тогда и view можно потом оттуда выбрасывать)...
== совет по sqlite3.h в следующей моей ветке
==
хотя можно и на Python + pandas DataFrames. вероятно

Добавлено через 35 минут
==
из паттернов проектирования - лучше начать с виртуального конструктора (по ID) - удобно для разнообразных входящих данных... и см. Сравнение фабрик

Добавлено через 4 минуты
ТЕМУ АРХИТЕКТУРЫ В ЭТОЙ ВЕТКЕ МОЖНО СЧИТАТЬ ЗАКРЫТОЙ
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
25.03.2020, 07:23  [ТС]
How to Iterate Through Directories in C++
даже рекурсивно можно обойти...
ранее (до C++ v.17) эта библа boost::filesystem
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.04.2020, 17:44  [ТС]
подходящий Итог:
(по примеру отсюда)
для U++ функция без проверки IfIsFile - т.к. folder'ов в проверяемой папке пока нет...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "ff.h"
#include <dirent.h>
using namespace Upp;
 
Upp::Vector <Upp::String>  myGetFld(Upp::String p)
{
   DIR * dir = opendir(p);
   struct dirent *file;
   Upp::Vector <Upp::String> vec;
   int i=0;             
   while ((file = readdir(dir)) != NULL)
    {
        vec.push_back(file->d_name);
        LOG(p+vec[i]);
        i=i+1;
    } 
    return vec ;
}
 
CONSOLE_APP_MAIN
{
    Upp::StdLogSetup(LOG_COUT|LOG_FILE);
    
    setlocale(LC_ALL, "");
    
    Upp::String p = "E:\\NEW";
    Upp::Vector <Upp::String> vecFLD;
    vecFLD = myGetFld(p);
    
    system("pause");    
}
Добавлено через 2 минуты
если нужен будет перевод в char - можно сориентироваться сюда - для построения char'ового массива
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
08.04.2020, 20:28
Лучший ответ Сообщение было отмечено JeyCi как решение

Решение

Для U++:
C++
1
2
3
4
5
6
7
8
9
10
11
Upp::Vector <Upp::String> myGetFld(Upp::String p)
{
    Upp::Vector <Upp::String> vec;
       
    for(Upp::FindFile ff(Upp::AppendFileName(p, "*.*")); ff; ff.Next()) 
    {
        vec.push_back(ff.GetName());
        LOG(p+vec[vec.GetCount()-1]);
    }     
    return vec;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2020, 20:28

Не открываются папки, в которых лежат текстовые файлы (*.txt)
Доброго времени суток. Стоит Windows 10. Иногда после включения не открываются папки, в которых лежат текстовые файлы (*.txt) - Проводник...

Объединить текстовые файлы из папки и подпапки в один файл
Нужно считать папку и подпапки, парсить все текстовые файлы, которые в них находятся, и создать новый файл, который склеит все те файлы с...

Как объединить в один все текстовые файлы заданной папки?
Как объединить в один все текстовые файлы заданной папки. Кодировка у всех файлов - CP-1251, такая же кодировка необходима и выходному...

Текстовые файлы, как считать следующую строку посимвольно, оставаясь на нынешней
Вообщем такая проблема: вот кусок программы, где я читаю файл while not Eof(F) do Begin readln(F,l); k:=''; for i:=1 to...

Текстовые файлы. Считать данные одномерного массива, вычислить сумму элементов массива
написать программу которая учитывает данные одномерного массива из текстового файла, вычисляет сумму элементов массива, найденную сумму...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru