Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Создать класс Triad (тройка чисел) и определить методы увеличения полей на 1.
- Определить производный класс Date с полями год, месяц и день.
- Переопределить методы увеличения полей на 1 и определить метод увеличения даты на n дней
- */
- #include <iostream>
- using namespace std;
- // класс тройки чисел
- class Triad {
- protected: // то же самое, что и private, только элементы под меткой private не наследуются, а под protected наследуются
- int X, Y, Z; // непосредственно тройка чисел
- public:
- Triad(int x, int y, int z) { // конструктор для класса Triad
- X = x; // заполнение элементов класса
- Y = y;
- Z = z;
- }
- Triad() { // конструктор по умолчанию (он бесполезный, но без него прога не пашет, проверено на своей лабе вчера)
- X = 0;
- Y = 0;
- Z = 0;
- }
- int change_x() { // метод изменения поля Х класса Triad
- return ++X;
- }
- int change_y() { // аналогично, только изменение Y
- return ++Y;
- }
- int change_z() { // изменение поля Z
- return ++Z;
- }
- };
- // класс даты с переопределенными методами
- class Date : public Triad { // надпись class Date : public Triad означает, что класс Date в буквальном смысле "наследует" класс Triad, где public - вид наследования
- public:
- Date(int x, int y, int z) { // конструктор класса Date
- X = x;
- Y = y;
- Z = z;
- }
- int change_x() { // переопределенные методы (а точнее перегруженнные, но условие задачи требует называть их переопределенными) из класса Triad (выполняют ту же функцию, что и в классе Triad)
- return ++X;
- }
- int change_y() {
- return ++Y;
- }
- int change_z() {
- return ++Z;
- }
- int change_date(int n) { // метод изменения даты на n-ое количество дней вперед
- return X += n;
- }
- void getDate() { // метод вывода даты на экран
- cout << X << '.' << Y << '.' << Z << endl;
- }
- void normalizeDate(); /* прототип метода, который приводит дату к нормальному состоянию, т.е. если мы приплюсуем к дате некое число, которое выведет за границы нашу дату, например
- 23 12 2015 + 10 дней, и чтобы не получить на выходе значение 33 12 2015 пользуемся этим методом и получаем 2 01 2016*/
- };
- void Date :: normalizeDate() { // описание действий метода приведения даты к нормальному виду
- if (X > 31 && (Y == 1 || Y == 3 || Y == 5 || Y == 7 || Y == 8 || Y == 10 || Y == 12)) {
- Y++;
- X = X - 31;
- normalizeDate();
- } else if (X > 30 && (Y == 4 || Y == 6 || Y == 9 || Y == 11)) {
- Y++;
- X = X - 30;
- normalizeDate();
- } else if (Y == 2 && X > 28) {
- Y++;
- X = X - 28;
- normalizeDate();
- } else if (Y > 12) {
- Z++;
- Y = Y - 12;
- normalizeDate();
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- cout << "Введите тройку чисел: ";
- int x, y, z; cin >> x >> y >> z;
- Triad triad(x, y, z);
- Date date(x, y, z);
- if (x <= 0 || y <= 0 || z <= 0) { // проверка на ввод, если числа меньше или равны нуля, то просто не даем пользователю обращаться с ними, как с датой
- char choice_one;
- cout << "Вы можете работать с этими числами только как с вектором!" << endl;
- cout << "Выберите, что сделать с числами:\n Увеличить на 1 единицу: (i - increase) "; cin >> choice_one;
- if (choice_one == 'i') {
- cout << "\nПолученная тройка чисел: " << triad.change_x() << ' ' << triad.change_y() << ' ' << triad.change_z() << endl;
- }
- } else {
- date.normalizeDate();
- char choice_two;
- cout << "Выберите, как действовать с числами (d - как с датой, t - как с вектором): "; cin >> choice_two;
- if (choice_two == 't') {
- cout << "Выберите, что сделать с числами:\n Увеличить на 1 единицу: (i - increase) "; cin >> choice_two;
- if (choice_two == 'i') {
- cout << "\nПолученная тройка чисел: " << triad.change_x() << ' ' << triad.change_y() << ' ' << triad.change_z() << endl;
- }
- } else if (choice_two == 'd') {
- char choice_three;
- cout << "Выберите, что хотите сделать с датой (o - увеличить на 1 все, n - увеличить дату на n дней): "; cin >> choice_three;
- if (choice_three == 'o') {
- date.change_x();
- date.change_y();
- date.change_z();
- date.normalizeDate();
- cout << "Результат: ";
- date.getDate();
- } else if (choice_three == 'n') {
- int n = 0;
- cout << "Введите количество дней, на которое хотите увеличить текущую дату (по умолчанию 0) : "; cin >> n;
- date.change_date(n);
- date.normalizeDate();
- cout << "Полученная дата: ";
- date.getDate();
- }
- }
- }
- char choice_continue;
- cout << "Введите то, что хотите сделать (\"C\" - продолжить работу) : ";
- cin >> choice_continue;
- if (choice_continue == 'c') {
- main();
- } else {
- system("pause");
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment