Четвертый Borland C++ и его окружение




Конструктор - декомпрессор


Сначала посмотрим на очередность инициализации нашей версии Си

программы:

void decompressor_init(decompressor *dc, unsigned char *s, int len)

{

dc->p = s; dc->srclen = len; dc->rcnt = 0;

}

А теперь посмотрим на использование конструктора в версии C++:

decompressor::decompressor(unsigned char *s, int len)

{

p = s; srclen = len; rcnt = 0;

}

Отметим, что переменные p, scrlen, rcnt доступны непосредственно

в структуре, без каких-либо дополнительных указаний. Функции, принадлежащие классу, в Турбо и Borland С++ обладают таким свойством. Более

наглядно это проявляется в следующей функции декомпрессора next().

Decompressor::next() функция.

int decompressor::next(void)

{

if (rcnt && rcnt-- > 0) return c;// Рабочая длина для декомпрессора

if (!srclen || srclen-- <= 0) return -1; // Здесь конец

c = *p++; // Обработать следующий символ в буфере

if (c == 0xff) {

rcnt = *p++ - 1; // Уменьшить счетчик

c = *p++; // Здесь повторить символ

srclen -= 2;

}

return c;

}

Сравните эту версию с версией на Си. Borland С++ версия выглядит

более ясно и просто, не так ли?


Использование программой Borland С++ класса декомпрессора.

unsigned char buff[] = {'a',0xff,3,'b','c'};

main()

{ Объявление объекта декомпрессора,

с одновременной инициализацией.

int c; V

decompressor dc(buff, sizeof(buff));

while ((c = dc.next()) != -1) putchar(c);

return 0; ^

} Передача сообщения объекту

И так, мы только что выполнили конверсию программы из Си на С++.

В результате получен не просто преобразованный оригинал программы, а

ее объектно-ориентированное представление.




Содержание  Назад  Вперед