Hello Dimmy.
30 Sep 05 06:48, you wrote to Olga Nonova:
DT> В C++, кроме классов, есть ещё много полезных усовершенствований. DT> Строчные комментарии, объявления const, inline, передача аргументов по DT> ссылке, объявление параметра цикла в заголовке цикла, более строгая DT> проверка синтаксиса... да и классы, если использовать их ограниченно, DT> "инкапсулированно", а не строить деревьев, могут сделать программу DT> понятнее. Вот, например, такой класс кольцевого буфера:
DT> class Ring DT> { DT> public: DT> Ring (); DT> bool Empty (void); DT> bool Full (void); DT> bool Put (byte data); DT> byte Get (void); DT> private: DT> void Inc (byte & Idx); DT> byte Next (byte x); DT> byte Head, Tail; DT> qbuf Buf; DT> };
Ээээ.. слюшай, да :) Это не С++, это "С с фичами" :) С++ -это совершенно другой язык, требующий совершенно другого подхода и немного другого видения мира. Вполне жизненный пример из вполне embedded приложения:
//-- abstract base class for memory allocators, //-- provides memory allocation and access API bla-bla-bla class CMemAllocatorBase {...};
//-- Provides memory allocation on a heap class CHeapAllocator: public CMemAllocatorBase {...};
//-- provides memory allocation in a shared memory regions class CSharedMemoryAllocator : public CMemAllocatorBase {...}
/** Ring buffer template class @param TElement type of the buffer element @param TAllocator memory allocator @param nOverflowModel specifies how to handle buffer overflow
*/ template<class TElement, class TAllocator, int nOverflowModel>
class CRingBuffer {...};
//-- let's have queue of TInt16 on a heap, discard head on overflow typedef CRingBuffer<TInt16, CHeapAllocator, DiscardHead> TMyQueue1;
TMyQueue1* pQueue1 = TMyQueue1::Create(125); pQueue1->PutElement(0x23);
//-- let's have queue of TByte in a shared memory, discard tail on overflow typedef CRingBuffer<TByte, CSharedMemoryAllocator, DiscardTail> TMyQueue2;
TMyQueue2* pQueue2 = TMyQueue2::Create(0x40000);
//-- let's have queue of TMyStruct in a shared memory, discard tail on overflow TMyStruct {...}
typedef CRingBuffer<TMyStruct, CSharedMemoryAllocator, DiscardTail> TMyQueue3;
TMyQueue3* pQueue3 = TMyQueue2::Create(0x200);
Что скажут народные академики ? ;)
Dmitry