lesson_3 #3

Open
alexander wants to merge 5 commits from lesson_3 into master
Owner
  1. Создать абстрактный класс Figure (фигура). Его наследниками являются классы Parallelogram (параллелограмм) и Circle (круг). Класс Parallelogram — базовый для классов Rectangle (прямоугольник), Square (квадрат), Rhombus (ромб). Для всех классов создать конструкторы. Для класса Figure добавить чисто виртуальную функцию area() (площадь). Во всех остальных классах переопределить эту функцию, исходя из геометрических формул нахождения площади.
  2. Создать класс Car (автомобиль) с полями company (компания) и model (модель). Классы-наследники: PassengerCar (легковой автомобиль) и Bus (автобус). От этих классов наследует класс Minivan (минивэн). Создать конструкторы для каждого из классов, чтобы они выводили данные о классах. Создать объекты для каждого из классов и посмотреть, в какой последовательности выполняются конструкторы. Обратить внимание на проблему «алмаз смерти».
    Примечание: если использовать виртуальный базовый класс, то объект самого "верхнего" базового класса создает самый "дочерний" класс.
  3. Создать класс: Fraction (дробь). Дробь имеет числитель и знаменатель (например, 3/7 или 9/2). Предусмотреть, чтобы знаменатель не был равен 0. Перегрузить:
    • математические бинарные операторы (+, -, *, /) для выполнения действий с дробями
    • унарный оператор (-)
    • логические операторы сравнения двух дробей (==, !=, <, >, <=, >=).
      Примечание: Поскольку операторы < и >=, > и <= — это логические противоположности, попробуйте перегрузить один через другой.
      Продемонстрировать использование перегруженных операторов.
  4. Создать класс Card, описывающий карту в игре БлэкДжек. У этого класса должно быть три поля: масть, значение карты и положение карты (вверх лицом или рубашкой). Сделать поля масть и значение карты типом перечисления (enum). Положение карты - тип bool. Также в этом классе должно быть два метода:
    • метод Flip(), который переворачивает карту, т.е. если она была рубашкой вверх, то он ее поворачивает лицом вверх, и наоборот.
    • метод GetValue(), который возвращает значение карты, пока можно считать, что туз = 1.
1. Создать абстрактный класс Figure (фигура). Его наследниками являются классы Parallelogram (параллелограмм) и Circle (круг). Класс Parallelogram — базовый для классов Rectangle (прямоугольник), Square (квадрат), Rhombus (ромб). Для всех классов создать конструкторы. Для класса Figure добавить чисто виртуальную функцию area() (площадь). Во всех остальных классах переопределить эту функцию, исходя из геометрических формул нахождения площади. 2. Создать класс Car (автомобиль) с полями company (компания) и model (модель). Классы-наследники: PassengerCar (легковой автомобиль) и Bus (автобус). От этих классов наследует класс Minivan (минивэн). Создать конструкторы для каждого из классов, чтобы они выводили данные о классах. Создать объекты для каждого из классов и посмотреть, в какой последовательности выполняются конструкторы. Обратить внимание на проблему «алмаз смерти». *Примечание: если использовать виртуальный базовый класс, то объект самого "верхнего" базового класса создает самый "дочерний" класс.* 3. Создать класс: Fraction (дробь). Дробь имеет числитель и знаменатель (например, 3/7 или 9/2). Предусмотреть, чтобы знаменатель не был равен 0. Перегрузить: * математические бинарные операторы (+, -, *, /) для выполнения действий с дробями * унарный оператор (-) * логические операторы сравнения двух дробей (==, !=, <, >, <=, >=). *Примечание: Поскольку операторы < и >=, > и <= — это логические противоположности, попробуйте перегрузить один через другой.* Продемонстрировать использование перегруженных операторов. 4. Создать класс Card, описывающий карту в игре БлэкДжек. У этого класса должно быть три поля: масть, значение карты и положение карты (вверх лицом или рубашкой). Сделать поля масть и значение карты типом перечисления (enum). Положение карты - тип bool. Также в этом классе должно быть два метода: * метод Flip(), который переворачивает карту, т.е. если она была рубашкой вверх, то он ее поворачивает лицом вверх, и наоборот. * метод GetValue(), который возвращает значение карты, пока можно считать, что туз = 1.
alexander added 5 commits 2021-06-25 21:22:47 +00:00
jediserg reviewed 2021-07-01 15:04:22 +00:00
@ -0,0 +93,4 @@
float area()
{
float area = getSideA() * getSideB();
First-time contributor

можно сторона а в квадрате

можно сторона а в квадрате
jediserg reviewed 2021-07-01 15:05:09 +00:00
@ -0,0 +109,4 @@
float area()
{
float area = getSideA() * getSideB();
First-time contributor

площадь ромба произведение сторон, или это уже здесь диогонали)

площадь ромба произведение сторон, или это уже здесь диогонали)
jediserg reviewed 2021-07-01 15:11:40 +00:00
@ -0,0 +19,4 @@
return m_model;
}
public:
Car(std::string company, std::string model) : m_company(company), m_model(model)
First-time contributor

const std::string& или m_company(std::move(company))

const std::string& или m_company(std::move(company))
jediserg reviewed 2021-07-01 15:15:37 +00:00
@ -0,0 +15,4 @@
* Поиск наибольшего общего делителя
* для числителя и знаменателя
*/
int NOD(int n1, int n2)
First-time contributor

такие функции лучше или вынести из класса или сделать статическими, здесь не нужен доступ к полям класса

такие функции лучше или вынести из класса или сделать статическими, здесь не нужен доступ к полям класса
jediserg reviewed 2021-07-01 15:17:40 +00:00
@ -0,0 +9,4 @@
enum rank {ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};
enum suit {CLUBS, DIAMONDS, HEARTS, SPADES};
Card(rank r = ACE, suit s = SPADES, bool ifu = true): m_Rank(r), m_Suit(s), m_IsFaceUp(ifu) { }
First-time contributor

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

Не вижу смысл инициализации по умолчанию первых двух параметров, это не часто используемое и не основное значение
jediserg reviewed 2021-07-01 15:19:36 +00:00
@ -0,0 +22,4 @@
bool m_IsFaceUp;
};
int Card::GetValue() const
First-time contributor

а туз может два значения иметь)

а туз может два значения иметь)
jediserg reviewed 2021-07-01 15:24:32 +00:00
@ -0,0 +6,4 @@
class Card
{
public:
enum rank {ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};
First-time contributor

вообще насколько я помню если явно не прописанно значение, то гарантии нет что значения будут нужные. Если спользуются значения enum, лучше все забить. Но я бы не использовал чтобы сущности не путались. А сделать метод например

size_t rank2score(rank r) {
static std::unordered_map<rank, size_t> scores = {
{TWO, 2},
.....
};

return scores[rank];

}

вообще насколько я помню если явно не прописанно значение, то гарантии нет что значения будут нужные. Если спользуются значения enum, лучше все забить. Но я бы не использовал чтобы сущности не путались. А сделать метод например size_t rank2score(rank r) { static std::unordered_map<rank, size_t> scores = { {TWO, 2}, ..... }; return scores[rank]; }
This pull request can be merged automatically.
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b lesson_3 master
git pull origin lesson_3

Step 2:

Merge the changes and update on Gitea.
git checkout master
git merge --no-ff lesson_3
git push origin master
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: alexander/geekbrains_oop_cpp#3
No description provided.