В простейшем случае (например, нашумевшая игра «Симулятор сисадмина», рекламировавшая серверы 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 — внутренние объекты операционной системы. Одни из них сидят и ждут своей очереди, как нажатия клавиш или пользовательские сообщения, другие — как таймеры и прорисовки — места в очереди не занимают, но генерируются на месте.
Макросы SIGNAL и SLOT устарели и лучше их не использовать (сложный синтаксис, при несовпадении типов жалуется в консоль).
Лучше использовать шаблонный вариант функции connect: