Для повышения эффективности выделение памяти объектами этого класса осуществляется блоками, кратными некоторому фиксированному значению (32 байта). При этом переменная length содержит текущую длину строки в символах (без учета '\0'), а переменная maxLength - размер выделенного буфера в байтах. Выделение блока большего размера происходит только в том случае, если maxLength байт недостаточно.
Еще одним примером класса в нашей модели является класс Log, реализующий так называемый лог, в который в процессе работы программы можно записывать различную информацию. При этом запись информации осуществляется как в файл с заданным именем, так и в debug log системы Windows, что позволяет просматривать сообщения прямо из среды отладки. Кроме того, после каждой записи в файл происходит сброс записи на диск, что сохраняет записи в случае падения программы (или Windows).
Ниже приводится его описание.
та
class LogManipulator
{
public:
LogManipulator () {}
} ;
class Log : public Object {
private:
String buf;
String fileName; public:
Log ( const Strings theFileName = "" );
Logs operator « ( const Strings str ) {
buf += str; return *this;
}
Logs operator « ( const char * str ) {
buf += str; return *this;.
}
Объектная модель. Основные классы
Log& operator << ( char ch )
{
buf += ch; return *this;
}
Log& operator << ( bool v ) {
if ( v )
buf += "true";
else
buf += "falser-return *this;
}
Log& operator « ( int v ); Log& operator << ( float v );
Log& operator << ( const LogManipulator& man );
static MetaClass classlnstance;
protected:
void flush ();
// flushes buf to log, called on logEndl;
};
Для добавления записей в лог используются перегруженный оператор <<, позволяющий легко выводить значения разных типов. При этом выводимые значения вначале записываются во внутренний буфер. Вывод значения фиктивного класса LogManipulator служит для записи содержимого буфера в файл и debug log Windows.
Для удобства сразу определяется указатель на стандартный лог - sysLog, а также объект класса LogManipulator - logEndl. Таким образом, для вывода информации в лог можно использовать конструкции вида