User Tag List

Страница 60 из 112 ПерваяПервая ... 565758596061626364 ... ПоследняяПоследняя
Показано с 591 по 600 из 1115

Тема: Эмулятор УКНЦ - UKNCBTL

  1. #591

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Тогда и незачем особо использовать классы
    Конструкторы - это просто песня. Т.к. в C++ все типы данных являются классами - конструктор можно задать для чего угодно. У меня почти все "обычные" структуры имеют конструкторы с пустым телом - просто устанавливающие для членов значения по умолчанию.

    Например:
    Код:
    struct Point {
    	int X;
    	int Y;
    	Point():
    	X(0),
    	Y(0)
    	{}
    };
    В подобной ситуации становится абсолютно невозможно создать экземпляр такой структуры с неинициализированными членами.

    Если хочется дополнительно иметь возможноcть явно задавать начальные значения членов при создании структуры - можно сделать так:

    Код:
    struct Point {
    	int X;
    	int Y;
    	Point( int X0 = 0, int Y0 = 0 ):
    	X(X0),
    	Y(Y0)
    	{}
    };
    и создавать экземпляры, например, так:
    Код:
    Point A;
    Point B(1,1);
    Последний раз редактировалось Patron; 30.01.2013 в 15:56.

  2. #592

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    У меня почти все "обычные" структуры имеют конструкторы с пустым телом - просто устанавливающие для членов значения по умолчанию.
    Лично для меня все это лишнее. Мне нагляднее, когда без классов - простые функции и простые данные. Без всяких указаний классов, зон паблик не паблик, конструкторов и т.д.

  3. #593

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Мне нагляднее, когда без классов - простые функции и простые данные.
    C++ - это и есть практически "чистый ассемблер" в том виде, в котором он должен быть. Использовать все его возможности в полном объёме или не использовать - зависит от потребностей. По мере роста потребностей - растёт и объём используемых возможностей.

    Важно лишь с самого начала понимать, что все без исключения возможности С++ - это практически всё тот же "чистый ассемблер" без каких-либо "наворотов".

  4. #594

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Важно лишь с самого начала понимать, что все без исключения возможности С++ - это практически всё тот же "чистый ассемблер" без каких-либо "наворотов".
    Я так не считаю)
    Программировал и на С++ с классами когда-то, и на чистом Си, и для меня просто Си очень дружественный, а ООП - нет.

  5. #595

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    для меня просто Си очень дружественный, а ООП - нет.
    То, что повсюду называют ООП - на мой взгляд - просто вывих мозга. Как можно писать в таком стиле я представить себе не могу. Именно безумный стиль "ООП" многие (как я понимаю) путают с сутью объектного подхода.

    На самом деле программа, использующая объекты - это лишь упрощённый вариант программы без объектов.

    Вот пример класса LockVarType, создающего объекты быстрой межпоточной синхронизации размером в одно слово:

    Код:
    #define DWORD_ALIGN    __declspec(align(4))
    #define LOCK_VAR_TYPE  DWORD_ALIGN LONG volatile
    
    class LockVarType {
    public:
    	LockVarType():dwLockVar(0){}
    	inline dword IsLocked(){ return dwLockVar; }
    	inline void  Lock( int nSleepMS = 0 )
    	{
    		while( InterlockedCompareExchange( &dwLockVar, 1, 0 ) ) { Sleep( nSleepMS ); }
    	}
    	inline void  UnLock() { dwLockVar = 0; }
    	inline bool  TimedLock( dword uTimeOut_MS, int nSleepMS = 0 ) 
    	{
    		dword  uTC = GetTickCount();
    		while( InterlockedCompareExchange( &dwLockVar, 1, 0 ) ) 
    		{
    			if( GetTickCount() - uTC >= uTimeOut_MS ) { return false; }
    			Sleep( nSleepMS );
    		}
    		return true;
    	}
    	inline bool TryLock() { return !InterlockedCompareExchange( &dwLockVar, 1, 0 ); }
    
    protected:
    	LOCK_VAR_TYPE  dwLockVar;
    	
    };
    Этот объект имеет после компиляции размер в одно слово.
    Сделать межпоточную синхронизацию легче и проще вряд ли реально.

  6. #596

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Этот объект имеет после компиляции размер в одно слово.
    Сделать межпоточную синхронизацию легче и проще вряд ли реально.
    Эм... точно одно слово? Я вижу какие-то функции)

  7. #597

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Эм... точно одно слово? Я вижу какие-то функции)
    Это макросы, которые подставляются в код программы в тех местах, где пользователь хочет как-то использовать объект.

    Например, чтобы включить, а потом выключить межпоточную блокировку пользователь пишет:
    Код:
    LockVar.Lock();
    ................
    LockVar.UnLock();
    А в код программы вставляется:
    Код:
    while( InterlockedCompareExchange( &dwLockVar, 1, 0 ) ) { Sleep(0); }
    ................
    dwLockVar = 0;

  8. #598

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Например, чтобы включить, а потом выключить межпоточную блокировку пользователь пишет:
    Код:
    LockVar.Lock();
    ................
    LockVar.UnLock();
    На простом Си я напишу LockVar() или UnlockVar()

  9. #599

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    На простом Си я напишу LockVar() или UnlockVar()
    Обычно нужно ещё передать используемую переменную в качестве параметра (не писать же для каждой новой переменной собственные уникальные макросы), а когда переменная объект - она сама себя передаёт в качестве аргумента своим методам.

    ---------- Post added at 16:26 ---------- Previous post was at 16:23 ----------

    Вот и получается, что разница между LockVar( &dwLockVar ) и LockVar.Lock() только в том, что при переносе кода из одного проекта в другой - не надо думать, что относится к блокировке, а что нет - всё необходимое уже "упаковано" в описание объекта.

    ---------- Post added at 16:41 ---------- Previous post was at 16:26 ----------

    Важное преимущество C++ перед C, которое заставляет писать даже C-программы в формате C++ - это возможность объявлять любую переменную там, где она нужна, а не в начале функции.

    Когда пишешь функцию на несколько экранов ( а у меня они почти все такие ) - лазить каждый раз в самое начало, чтобы добавить новую переменную - очень утомляет.

    А можно в ANSI C задавать переменную цикла прямо в операторе for ?
    Код:
    for( int i = 0 ; i < 100 ; i++ )

  10. #600

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    А можно в ANSI C задавать переменную цикла прямо в операторе for ?
    Код:
    for( int i = 0 ; i < 100 ; i++ )
    Да, это возможность удобная, и сам ее иногда использую. Хотя, стараюсь не злоупотреблять, чтобы не раскидывать обьявления по коду.
    Так же в Си++ удобно, что можно писать преобразование типов, скажем, не k = (long)i, а k = long(i). Для наглядности иногда удобней.

    Вот и все, чем я пользуюсь из Си++ )

Страница 60 из 112 ПерваяПервая ... 565758596061626364 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1198
    Последнее: 07.05.2025, 13:34
  2. Ответов: 247
    Последнее: 17.11.2024, 07:55
  3. Эмулятор УКНЦ на JavaScript
    от nzeemin в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 27.04.2021, 14:26
  4. УКНЦ и Gotec Flash Floppy эмулятор
    от Ynicky в разделе ДВК, УКНЦ
    Ответов: 10
    Последнее: 10.09.2019, 04:34
  5. Продам МС5310 блок дисководов к УКНЦ+КМД УКНЦ
    от Mad Killer/PG в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 19.03.2012, 11:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •