aLT22

Ann's_Lab_3_OOP (C++) (with comments)

Mar 24th, 2015
972
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.10 KB | None | 0 0
  1. /*
  2.     Создать класс Triad (тройка чисел) и определить методы увеличения полей на 1.
  3.     Определить производный класс Date с полями год, месяц и день.
  4.     Переопределить методы увеличения полей на 1 и определить метод увеличения даты на n дней
  5. */
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10. // класс тройки чисел
  11. class Triad {
  12.     protected:          // то же самое, что и private, только элементы под меткой private не наследуются, а под protected наследуются
  13.         int X, Y, Z;    // непосредственно тройка чисел
  14.     public:
  15.         Triad(int x, int y, int z) {    // конструктор для класса Triad
  16.             X = x;      // заполнение элементов класса
  17.             Y = y;
  18.             Z = z;
  19.         }
  20.         Triad() {               // конструктор по умолчанию (он бесполезный, но без него прога не пашет, проверено на своей лабе вчера)
  21.             X = 0;
  22.             Y = 0;
  23.             Z = 0;
  24.         }
  25.         int change_x() {        // метод изменения поля Х класса Triad
  26.             return ++X;
  27.         }
  28.         int change_y() {        // аналогично, только изменение Y
  29.             return ++Y;
  30.         }
  31.         int change_z() {        // изменение поля Z
  32.             return ++Z;
  33.         }
  34. };
  35.  
  36. // класс даты с переопределенными методами
  37. class Date : public Triad {             // надпись class Date : public Triad означает, что класс Date в буквальном смысле "наследует" класс Triad, где public - вид наследования
  38.     public:
  39.         Date(int x, int y, int z) {         // конструктор класса Date
  40.             X = x;
  41.             Y = y;
  42.             Z = z;
  43.         }
  44.         int change_x() {        // переопределенные методы (а точнее перегруженнные, но условие задачи требует называть их переопределенными) из класса Triad (выполняют ту же функцию, что и в классе Triad)
  45.             return ++X;
  46.         }
  47.         int change_y() {
  48.             return ++Y;
  49.         }
  50.         int change_z() {
  51.             return ++Z;
  52.         }
  53.         int change_date(int n) {        // метод изменения даты на n-ое количество дней вперед
  54.             return X += n;
  55.         }
  56.         void getDate() {        // метод вывода даты на экран
  57.             cout << X << '.' << Y << '.' << Z << endl;
  58.         }
  59.         void normalizeDate();   /* прототип метода, который приводит дату к нормальному состоянию, т.е. если мы приплюсуем к дате некое число, которое выведет за границы нашу дату, например
  60.                                 23 12 2015 + 10 дней, и чтобы не получить на выходе значение 33 12 2015 пользуемся этим методом и получаем 2 01 2016*/
  61. };
  62.  
  63. void Date :: normalizeDate() {      // описание действий метода приведения даты к нормальному виду
  64.     if (X > 31 && (Y == 1 || Y == 3 || Y == 5 || Y == 7 || Y == 8 || Y == 10 || Y == 12)) {
  65.         Y++;
  66.         X = X - 31;
  67.         normalizeDate();
  68.     } else if (X > 30 && (Y == 4 || Y == 6 || Y == 9 || Y == 11)) {
  69.         Y++;
  70.         X = X - 30;
  71.         normalizeDate();
  72.     } else if (Y == 2 && X > 28) {
  73.         Y++;
  74.         X = X - 28;
  75.         normalizeDate();
  76.     } else if (Y > 12) {
  77.         Z++;
  78.         Y = Y - 12;
  79.         normalizeDate();
  80.     }
  81. }
  82.  
  83. int main() {
  84.     setlocale(LC_ALL, "Russian");
  85.     cout << "Введите тройку чисел: ";
  86.     int x, y, z; cin >> x >> y >> z;
  87.     Triad triad(x, y, z);
  88.     Date date(x, y, z);
  89.     if (x <= 0 || y <= 0 || z <= 0) {   // проверка на ввод, если числа меньше или равны нуля, то просто не даем пользователю обращаться с ними, как с датой
  90.         char choice_one;
  91.         cout << "Вы можете работать с этими числами только как с вектором!" << endl;
  92.         cout << "Выберите, что сделать с числами:\n     Увеличить на 1 единицу: (i - increase) "; cin >> choice_one;
  93.         if (choice_one == 'i') {
  94.             cout << "\nПолученная тройка чисел: " << triad.change_x() << ' ' << triad.change_y() << ' ' << triad.change_z() << endl;
  95.         }
  96.     } else {
  97.         date.normalizeDate();
  98.         char choice_two;
  99.         cout << "Выберите, как действовать с числами (d - как с датой, t - как с вектором): "; cin >> choice_two;
  100.         if (choice_two == 't') {
  101.             cout << "Выберите, что сделать с числами:\n     Увеличить на 1 единицу: (i - increase) "; cin >> choice_two;
  102.             if (choice_two == 'i') {
  103.                 cout << "\nПолученная тройка чисел: " << triad.change_x() << ' ' << triad.change_y() << ' ' << triad.change_z() << endl;
  104.             }
  105.         } else if (choice_two == 'd') {
  106.             char choice_three;
  107.             cout << "Выберите, что хотите сделать с датой (o - увеличить на 1 все, n - увеличить дату на n дней): "; cin >> choice_three;
  108.             if (choice_three == 'o') {
  109.                 date.change_x();
  110.                 date.change_y();
  111.                 date.change_z();
  112.                 date.normalizeDate();
  113.                 cout << "Результат: ";
  114.                 date.getDate();
  115.             } else if (choice_three == 'n') {
  116.                 int n = 0;
  117.                 cout << "Введите количество дней, на которое хотите увеличить текущую дату (по умолчанию 0) : "; cin >> n;
  118.                 date.change_date(n);
  119.                 date.normalizeDate();
  120.                 cout << "Полученная дата: ";
  121.                 date.getDate();
  122.             }
  123.         }
  124.     }
  125.     char choice_continue;
  126.     cout << "Введите то, что хотите сделать (\"C\" - продолжить работу) : ";
  127.     cin >> choice_continue;
  128.     if (choice_continue == 'c') {
  129.         main();
  130.     } else {
  131.         system("pause");
  132.         return 0;
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment