Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.12 KB | None | 0 0
  1.  
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. // диапазон радио
  6. enum range_t { AM, FM };
  7.  
  8. class Radio {
  9. protected:
  10.     // частота
  11.     double m_frequency;
  12. public:
  13.     // конструктор
  14.     Radio(double frequency) : m_frequency(frequency) { }
  15.  
  16.     // виртуальные методы реализованы в классах наследниках, метод перегруженный
  17.     virtual void information() = 0;
  18.     virtual void information(const char *filename, const char *openmode) = 0;
  19.  
  20.     // получить значение частоты радио (доступен в классах наследниках)
  21.     double get_frequency() {
  22.         return m_frequency;
  23.     }
  24.  
  25.     // получение дипазона по частоте
  26.     range_t range() {
  27.         if (m_frequency < 130.0)
  28.             return AM;
  29.         else
  30.             return FM;
  31.     }
  32.  
  33.     // деструктор
  34.     ~Radio() { }
  35. };
  36.  
  37. class Military : public Radio {
  38. protected:
  39.     // открытый ключ шифрования
  40.     unsigned long m_encryption_key;
  41. public:
  42.     // конструктор военного радио
  43.     Military(double frequency, unsigned long encryption_key) : Radio(frequency), m_encryption_key(encryption_key) { }
  44.  
  45.     // реализация метода из базоваого класса
  46.     void information() {
  47.         printf("military radio (frequency: %lf, range: %s, encryption key: %lu)\n", m_frequency, (range() == AM ? "AM" : "FM"), m_encryption_key);
  48.     }
  49.  
  50.     // и ещё одна
  51.     void information(const char *filename, const char *openmode) {
  52.         FILE *file = fopen(filename, openmode);
  53.         if (!file)
  54.             return;
  55.         fprintf(file, "military radio (frequency: %lf, range: %s, encryption key: %lu)\n", m_frequency, (range() == AM ? "AM" : "FM"), m_encryption_key);
  56.         fclose(file);
  57.     }
  58.  
  59.     // получение открытого ключа шифрования (ТОЛЬКО чтение)
  60.     unsigned long long get_encryption_key() {
  61.         return m_encryption_key;
  62.     }
  63.    
  64.     ~Military() {
  65.         // ВОЕННЫЕ ЗАТИРАЮТ ДАННЫЕ О СВОЁМ РАДИО!1!!
  66.         m_frequency = 0;
  67.         m_encryption_key = 0;
  68.     }
  69. };
  70.  
  71. class Civilian : public Radio {
  72. private:
  73.     // статическая константа - максимальная длина названия
  74.     // статическая - потому что едина для всех объектов данного класса
  75.     static const unsigned int CAPTION_LENGTH = 16;
  76. protected:
  77.     // название гражданского радио
  78.     char m_caption[CAPTION_LENGTH + 1];
  79.     // факт наличия рекламы
  80.     bool m_advertisement;
  81. public:
  82.     // конструктор
  83.     Civilian(double frequency, const char *caption, bool advertisement) : Radio(frequency), m_advertisement(advertisement) {
  84.         strncpy(m_caption, caption, CAPTION_LENGTH);
  85.     }
  86.  
  87.     // ко-ко-кок-кок
  88.     void information() {
  89.         printf("civilian radio \"%s\" (frequency: %lf, range: %s)\n", m_caption, m_frequency, (range() == AM ? "AM" : "FM"));
  90.     }
  91.  
  92.     // тоже кококоокок
  93.     void information(const char *filename, const char *openmode) {
  94.         FILE *file = fopen(filename, openmode);
  95.         if (!file)
  96.             return;
  97.         fprintf(file, "civilian radio \"%s\" (frequency: %lf, range: %s)\n", m_caption, m_frequency, (range() == AM ? "AM" : "FM"));
  98.         fclose(file);
  99.     }
  100.  
  101.     // название гражданского радио (чтение)
  102.     const char *get_caption() {
  103.         return m_caption;
  104.     }
  105.  
  106.     // как название, только с рекламой
  107.     bool get_advertisement() {
  108.         return m_advertisement;
  109.     }
  110.  
  111.     // деструктор
  112.     ~Civilian() { }
  113. };
  114.  
  115. int main() {
  116.     // Radio *radio1 = new Radio(120.0);
  117.     Radio *radio2 = new Military(110.0, 1234546);
  118.     radio2->information();
  119.     Radio *radio3 = new Civilian(150.0, "ko-ko-ko FM", false);
  120.     radio3->information("out.txt", "w");
  121.     return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement