C++ Практика Наследование

Материал из CSC Wiki
Перейти к:навигация, поиск

Реализовать класс 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() { }

};

Как работать с цветами

  1. include <stdio.h>
  1. define ANSI_COLOR_RED "\x1b[31m"
  2. define ANSI_COLOR_GREEN "\x1b[32m"
  3. define ANSI_COLOR_YELLOW "\x1b[33m"
  4. define ANSI_COLOR_BLUE "\x1b[34m"
  5. define ANSI_COLOR_MAGENTA "\x1b[35m"
  6. define ANSI_COLOR_CYAN "\x1b[36m"
  7. 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() { }
};