- Создайте в своём репозитории
2022-polytech-%фамилия%
директорию08_oop
- Cоздайте пустой
README.md
файл - В директории
08_oop/intro
создайте cmake-проект - Напишите класс
String
, используя код из лекции (разместит код в новых файлахString.h
иString.cpp
) - Напишите нереализованные методы
- Добавьте оператор сложения строк (конкатенация)
- Добавьте оператор вывода
operator<<
строки вstd::cout
- Приведите пример использования класса и его методов
- Отправьте решение на GitHub
- В директории
08_oop/complex
создайте cmake-проект - Скачайте файл и положите его в директорию
08_oop/complex
- Добавьте файл
CMakeLists.txt
с таким содержанием
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(complex LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
include(doctest.cmake)
add_executable(tests custom_complex.cpp test_complex.cpp)
target_link_libraries(tests PRIVATE doctest)
- Добавьте файл
test_complex.cpp
с таким содержанием
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest.h>
#include "custom_complex.h"
TEST_CASE("sum of complex numbers")
{
CHECK_EQ(Complex(1, 0)+Complex(2, 0), Complex(3, 0));
CHECK_EQ(Complex(-1, 0)+Complex(2, 0), Complex(1, 0));
CHECK_EQ(Complex(1, 1)+Complex(0, 2), Complex(1, 3));
CHECK_EQ(Complex(0, -2)+Complex(0, 3), Complex(0, 1));
}
TEST_CASE("sub of complex numbers")
{
CHECK_EQ(Complex(1, 0)-Complex(2, 0), Complex(-1, 0));
CHECK_EQ(Complex(-1, 0)-Complex(2, 0), Complex(-3, 0));
CHECK_EQ(Complex(1, 1)-Complex(0, 2), Complex(1, -1));
CHECK_EQ(Complex(0, -2)-Complex(0, 3), Complex(0, -5));
}
TEST_CASE("abs of complex numbers")
{
CHECK_EQ(Complex(1, 0).abs(), 1);
CHECK_EQ(Complex(-1, 0).abs(), 1);
CHECK_EQ(Complex(1, 1).abs(), doctest::Approx(1.41421).epsilon(0.01));
CHECK_EQ(Complex(0, -2).abs(), 2);
}
- Реализуйте класс комлексных чисел с поддержкой сложения, вычитания, модуля и сравнения на равенство
operator==
- Отправьте решение на GitHub
- В директории
08_oop/students
создайте cmake-проект с использованием doctest - Напишите программу, которая управляет списком студентов
- Реализуйте класс
Student
, который содержит имя и оценку студента - Добавьте класс
StudenList
, который содержит список студентов (используйте массив) - Добавьте в класс
StudenList
методы, позволяющие добавить студента, удалить студента, поставить оценку студенту, получить среднюю оценку студентов, спиоск лучших студентов (высокая оценка), список худших студентов (низка оценка) - Добавьте возможность выводить список студентов в стандартный поток
std::cout
- Напишите тесты для с использованием doctest
- Отправьте решение на GitHub
Комментарии
- В этом файле есть опечатки, вы можете их исправить через pull request.
- Всю работу удобно вести в отдельной ветке и затем влить готовый результат в основную ветку.
- Чтобы скачать файл с GitHub, используя web-интерфейс, его удобно представить в raw-виде (кнопка в интерфейсе GitHub).
- Сравнение чисел с плавающей точкой в doctest: Floating point comparisons.
- Операторы в С++: operator overloading.
- Создавая оператор
operator+
, удобно создать и операторoperator+=
, тогда реализация первого состоит из создания временного объектаtmp
и вызова у него+=
.