Да, Program — интерфейс (класс из одних абстрактных функций, возможно, с пустым виртуальным деструктором). Одна функция — exec, которая и реализована в Ls, Cp и т.д. Может, ещё name() — это уже как реализуешь поиск.
Command — совершенно верно.
Console — консоль (из-за того, что эти консоли вечно приходится перенаправлять, выделил в отдельный класс).
А System — это всё остальное, что я пока не конкретизировал — файловая система, переменные окружения, текущий каталог…
Тут даже «одиночки» не нужны, просто создать статически. Почему? — 1) из данных там, скорее всего, только виртуальная таблица да имя; 2) нужна же функциональность поиска программы по имени.
Резюмирую: вы смешали функциональность разбора командной строки, функциональность программы и прочие вещи, нужные программе типа файловой системы, в одном объекте.
У меня это соответственно Command, Program и System. Есть вероятность, что System придётся бить на меньшие объекты — это уже думай сам.
В простейшем случае (например, нашумевшая игра «Симулятор сисадмина», рекламировавшая серверы HP) объекты Program висят статически, и каждый из них эмулирует свою программу. Так потомки и будут называться: Ls, Cp, Cat и прочие.
> но тут именно «кресты».
Разумеется, весь этот код придётся впихнуть в какую-то функцию.
getSomeCommandLine — специально так написал, потому что не продумывал, как и откуда эту командную строку брать.
Где C#? Может быть, мои соглашения по идентификаторам близки к Java/Qt, а не к стандартной библиотеке C++, но тут именно «кресты».
Тому, что я написал, до законченного кода далеко, его можно превратить в любой синтаксис.
1) Не стоит без нужды в абстрактный класс вводить поля данных. И вот тут мышление Java/C# очень помогает: Command — конкретный класс с простейшей инкапсуляцией или даже без неё, разобранная командная строка. Если бы писали на C# — можно было бы даже sealed. Program — даже не абстрактный класс, а интерфейс (в терминах C++ — класс из одних абстрактных функций), у которого и есть exec с тремя параметрами — консоль, системное окружение, аргументы.
2) Но в том коде, который у вас сейчас, тоже нельзя присваивать. Остатки мышления C#, где все объекты висят в «куче» и управляются мусорщиком?
Да, я в одном месте пропагандировал мышление C#, в другом обругал. Первое — объектное мышление, общее для всех языков. Второе — разница в устройстве памяти того и другого.
Есть два варианта.
1. Вытащить иголкой контакты и расставить в нужном порядке.
2. Обрезать провода и припаять в нужном порядке. Или припаять другой разъём.
Ezhyg: Я не уверен, что ШИМом, скорее постоянным напряжением — ШИМ же должен мешать вентилям и датчику частоты… Так что, по-видимому, четвёртый провод сделан для удешевления конструкции.
Хотя скажи, когда — Athlon XP на имевшейся у меня недорогой плате не умел, а Core 2 Duo с платой Asus уже умел через отдельный четвёртый провод.
Видимо, управляемая нами отрисовка происходит в заэкранный буфер, а по событию WM_PAINT этот буфер сбрасывается на экран. Так что надо просто сделать, чтобы «бегали» системные события — иначе на экране ничего не будет.
А в процессоре транзисторов несколько миллиардов :) Транзистор — элемент, который может управлять большим током с помощью малого. Так что конденсатор разряжают через транзистор, потому что его надо то разряжать, то придерживать. Какой схемой управляется транзистор — не показано.
Можно, например, заменить транзистор реле (не всегда и не везде, но концептуально — да). Тоже управляет большими токами с помощью малых, только механическое. Можно более сложными схемами вроде компаратора на операционном усилителе. Смотря какая задача нужна.
Конденсатор в цифровых схемах чаще всего ставят как фильтр питания, чтобы ни один пичок напряжения не прошёл. В аналоговых схемах применений конденсатору не счесть. Фильтр частоты, элемент задержки (и как частность — часть мультивибратора)…
Сообщение не в смысле «что-то вывести на экран», а т.н. window messages — внутренние объекты операционной системы. Одни из них сидят и ждут своей очереди, как нажатия клавиш или пользовательские сообщения, другие — как таймеры и прорисовки — места в очереди не занимают, но генерируются на месте.
Command — совершенно верно.
Console — консоль (из-за того, что эти консоли вечно приходится перенаправлять, выделил в отдельный класс).
А System — это всё остальное, что я пока не конкретизировал — файловая система, переменные окружения, текущий каталог…