C++ Практика Наследование
Материал из SEWiki
Версия от 11:32, 31 октября 2014; Alexander.Opeykin (обсуждение | вклад) (Новая страница: «Реализовать класс FileOutputStream class FileOutputStream { FileOutputStream( char* filename ) : file_(fopen(filename, "w")) {…»)
Реализовать класс FileOutputStream
class FileOutputStream
{
FileOutputStream( char* filename )
: file_(fopen(filename, "w"))
{}
void print( int t )
void print( double t )
void print(char* name)
void flush()
~FileOutputStream( ) { fclose(file_); }
protected:
FileOutputStream( FILE * file )
: file_(file)
{}
private:
FileOutputStream& operator=(FileOutputStream const&);
FileOutputStream(FileOutputStream const&);
private:
FILE * file_;
};
На основе FileOutputStream реализовать класс ConsoleOutputStream c дополнительным методом setColor(XXX)
class ConsoleOutputStream : FileOutputStream {
ConsoleOutputStream() : FileOutputStream( stdout ) {}
XXX setColor(XXX)
~ConsoleOutputStream() { }
};
Как работать с цветами
- include <stdio.h>
- define ANSI_COLOR_RED "\x1b[31m"
- define ANSI_COLOR_GREEN "\x1b[32m"
- define ANSI_COLOR_YELLOW "\x1b[33m"
- define ANSI_COLOR_BLUE "\x1b[34m"
- define ANSI_COLOR_MAGENTA "\x1b[35m"
- define ANSI_COLOR_CYAN "\x1b[36m"
- define ANSI_COLOR_RESET "\x1b[0m"
int main (int argc, char const *argv[]) {
printf(ANSI_COLOR_RED "This text is RED!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_GREEN "This text is GREEN!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_YELLOW "This text is YELLOW!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_BLUE "This text is BLUE!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_CYAN "This text is CYAN!" ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_RED);
printf("This text is RED!");
printf(ANSI_COLOR_RESET "\n");
printf(ANSI_COLOR_GREEN);
printf("This text is RED!");
printf(ANSI_COLOR_RESET "\n");
return 0;
}
На основе FileOutputStream реализовать класс ErrorOutputStream, в котором методы используются для вывода сообщений об ошибках (дополнительно печатают, откуда был вызван метод)
Нужно использовать макросы: __FUNCTION__, __FILE__, __LINE__
сlass ErrorOutputStream : FileOutputStream
{
ErrorOutputStream() : FileOutputStream( stderr ) {}
void print(char* name, char* file, char* func, int line)
~ErrorOutputStream() { }
};