lesson_2 #2

Open
alexander wants to merge 8 commits from lesson_2 into master
3 changed files with 248 additions and 0 deletions

117
lesson_2/exercise_1.hpp Normal file
View File

@ -0,0 +1,117 @@
#ifndef EXERCISE_1_HPP_
#define EXERCISE_1_HPP_
#include <iostream>
enum Gender
Review

Я бы объявил enum в классе и кстати можно enum class использовать

Я бы объявил enum в классе и кстати можно enum class использовать
{
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)
Review

Отлично! Но в идеале еще конструктор перемещения))

Отлично! Но в идеале еще конструктор перемещения))
{
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

68
lesson_2/exercise_2.hpp Normal file
View File

@ -0,0 +1,68 @@
#ifndef EXERCISE_2_HPP_
#define EXERCISE_2_HPP_
#include <iostream>
class Fruit
Review

я бы конструктор сделал и в дочерних его вызывал из списка инициализации

я бы конструктор сделал и в дочерних его вызывал из списка инициализации
{
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 == "")
Review

ну тогда в значения параметра по умолчанию сразу green

ну тогда в значения параметра по умолчанию сразу green
color = "green";
setName("apple");
setColor(color);
}
};
class Banana : public Fruit
{
public:
Banana(std::string color = "")
{
if (color == "")
Review

здесь тоже в значение параметра по умолчанию цвет

здесь тоже в значение параметра по умолчанию цвет
color = "yellow";
setName("banana");
setColor(color);
}
};
class GrannySmith : public Apple
{
public:
GrannySmith()
{
setName("Granny Smith " + Apple::getName());
}
};
#endif

63
lesson_2/main.cpp Normal file
View File

@ -0,0 +1,63 @@
#include <iostream>
#include <vector>
#include "exercise_1.hpp"
#include "exercise_2.hpp"
using namespace std;
int Student::count = 0;
int main()
{
vector<Student> 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;
}