diff --git a/lesson_2/exercise_1.hpp b/lesson_2/exercise_1.hpp new file mode 100644 index 0000000..29fd2bf --- /dev/null +++ b/lesson_2/exercise_1.hpp @@ -0,0 +1,117 @@ +#ifndef EXERCISE_1_HPP_ +#define EXERCISE_1_HPP_ + +#include + +enum Gender +{ + GENDER_MALE, + GENDER_FEMALE +}; + +class Person +{ +private: + std::string m_name; + int m_age; + Gender m_gender; + float m_weight; +public: + Person(std::string name, int age, Gender gender, float weight) : + m_name(name), m_age(age), m_gender(gender), m_weight(weight) {} + + void setName(std::string name = "") + { + if (name == "") + { + std::cout << "Введите новое имя: "; + std::cin >> m_name; + } + else + m_name = name; + } + + void setAge(int age = 0) + { + if (age == 0) + { + std::cout << "Введите возраст: "; + std::cin >> m_age; + } + else + m_age = age; + } + + void setWeight(float weight = 0.0) + { + if (weight == 0) + { + std::cout << "Введите вес: "; + std::cin >> m_weight; + } + else + m_weight = weight; + } + + void printInfo() const + { + std::cout << "Имя: " << m_name << std::endl + << "Возраст: " << m_age << std::endl + << "Пол: " << (m_gender == GENDER_MALE ? "муж" : "жен") << std::endl + << "Вес: " << m_weight << std::endl; + } +}; + +class Student : public Person +{ +private: + static int count; + int m_yos; // year of study +public: + Student(std::string name, int age, Gender gender, float weight, int yos) : + Person(name, age, gender, weight), m_yos(yos) + { + count++; + } + + Student(const Student &s) : Person(s) + { + count++; + + m_yos = s.m_yos; + } + + static void printCount() + { + std::cout << "Количество студентов: " << count << std::endl; + } + + void setYearStudy(int yos = 0) + { + if (yos == 0) + { + std::cout << "Введите год обучения: "; + std::cin >> m_yos; + } + else + m_yos = yos; + } + + void incYear() + { + m_yos++; + } + + void printInfo() const + { + Person::printInfo(); + std::cout << "Год обучения: " << m_yos << std::endl; + } + + ~Student() + { + count--; + } +}; + +#endif diff --git a/lesson_2/exercise_2.hpp b/lesson_2/exercise_2.hpp new file mode 100644 index 0000000..ad31e0e --- /dev/null +++ b/lesson_2/exercise_2.hpp @@ -0,0 +1,68 @@ +#ifndef EXERCISE_2_HPP_ +#define EXERCISE_2_HPP_ + +#include + +class Fruit +{ +private: + std::string m_name; + std::string m_color; +public: + void setName(std::string name) + { + m_name = name; + } + + void setColor(std::string color) + { + m_color = color; + } + + const std::string& getName() const + { + return m_name; + } + + const std::string& getColor() const + { + return m_color; + } +}; + +class Apple : public Fruit +{ +public: + Apple(std::string color = "") + { + if (color == "") + color = "green"; + + setName("apple"); + setColor(color); + } +}; + +class Banana : public Fruit +{ +public: + Banana(std::string color = "") + { + if (color == "") + color = "yellow"; + + setName("banana"); + setColor(color); + } +}; + +class GrannySmith : public Apple +{ +public: + GrannySmith() + { + setName("Granny Smith " + Apple::getName()); + } +}; + +#endif diff --git a/lesson_2/main.cpp b/lesson_2/main.cpp new file mode 100644 index 0000000..2a8215a --- /dev/null +++ b/lesson_2/main.cpp @@ -0,0 +1,63 @@ +#include +#include +#include "exercise_1.hpp" +#include "exercise_2.hpp" + +using namespace std; + +int Student::count = 0; + +int main() +{ + vector students; + + students.emplace_back("Олег", 20, GENDER_MALE, 75.2, 2020); + students.emplace_back("Андрей", 19, GENDER_MALE, 72.8, 2020); + + Student::printCount(); + + students.emplace_back("Анастасия", 20, GENDER_FEMALE, 55.2, 2020); + students.emplace_back("Ольга", 21, GENDER_FEMALE, 49.3, 2020); + students.emplace_back("Владимир", 19, GENDER_MALE, 69.9, 2020); + + Student::printCount(); + + // Exercise 2 + + Apple a("red"); + Banana b; + GrannySmith c; + + std::cout << "My " << a.getName() << " is " << a.getColor() << ".\n"; + std::cout << "My " << b.getName() << " is " << b.getColor() << ".\n"; + std::cout << "My " << c.getName() << " is " << c.getColor() << ".\n"; + + // Exercise 3 + /* + Для реализации игры в Блэкджек необходимы данные объекты: + + 1) Колода карт + 2) Игрок + 3) Дилер + + Исходя из указанных объектов можно определить несколько классов: + + 1) Карта + - номинал + - масть + 2) Колода + - массив ссылок на объекты класса Карта + 3) Игрок (абстрактный класс) + - Имя игрока + 4) Игрок (человек, потомок от абстрактного класса Игрок) + 5) Дилер (человек, потомок от абстрактного класса Игрок) + 6) Рука (набор карт) + - массив ссылок на карты каждого игрока + 7) Игра + - текущая Колода + - текущий Дилер + - текущий Игрок + */ + + return 0; +}