Файл: Отчет за практическое занятие 5 Тема Проектирование классов и создание объектов.docx
Добавлен: 09.11.2023
Просмотров: 13
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ПРИЛОЖЕНИЕ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
______________________________ _________________________________________
Институт непрерывного образования
Кафедра Безопасности информационных систем
Дисциплина «Технологии программирования»
ОТЧЕТ
За практическое занятие №5
Тема: Проектирование классов и создание объектов
Вариант 9 «Б»
Выполнил:
Студент 2 курса, гр. ИБ-12з:
_Кондылев А.А.
Принял:
Доцент кафедры БИС
_Медведев В.А.
Санкт-Петербург
2023
Тема: Проектирование классов и создание объектов
Цель: Получение практических навыков разработки классов, создания объектов и использования дружественных функций для обработки данных.
Задание 1. Спроектировать класс point, обозначающий координаты точки на плоскости: x,y. Разработать:
а) конструктор с параметрами - для инициализации объектов класса point;
б) функции доступа к закрытым членам класса;
в) деструктор, обозначающий момент уничтожения объекта.
Создать два объекта и продемонстрировать работу методов класса.
Задание 3. Спроектировать класс в соответствии с индивидуальным заданием (см. приложение). Создать массив из 6-ти объектов спроектированного класса. Рассчитать Вычисляемый показатель.
ПРИЛОЖЕНИЕ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
______________________________ _________________________________________
Институт непрерывного образования
Кафедра Безопасности информационных систем
Дисциплина «Технологии программирования»
ОТЧЕТ
За практическое занятие №5
Тема: Проектирование классов и создание объектов
Вариант 9 «Б»
Выполнил:
Студент 2 курса, гр. ИБ-12з:
_Кондылев А.А.
Принял:
Доцент кафедры БИС
_Медведев В.А.
Санкт-Петербург
2023
Тема: Проектирование классов и создание объектов
Цель: Получение практических навыков разработки классов, создания объектов и использования дружественных функций для обработки данных.
Задание 1. Спроектировать класс point, обозначающий координаты точки на плоскости: x,y. Разработать:
а) конструктор с параметрами - для инициализации объектов класса point;
б) функции доступа к закрытым членам класса;
в) деструктор, обозначающий момент уничтожения объекта.
Создать два объекта и продемонстрировать работу методов класса.
Задание 3. Спроектировать класс в соответствии с индивидуальным заданием (см. приложение). Создать массив из 6-ти объектов спроектированного класса. Рассчитать Вычисляемый показатель.
9. | Представитель университета | Количество студентов, обучающихся у конкретного преподавателя |
Исходный код:
Заголовочный файл point.h:
#ifndef HEADER_POINTCLASS
#define HEADER_POINTCLASS
class Point
{
private:
int x;
int y;
float v_length;
void calc_length();
public:
Point(int x, int y) :x(x),y(y) {this->calc_length();}
int get_x() const {return this->x;}
int get_y() const {return this->y;}
float vector_length() const {return this->v_length;}
void set_coors(int x, int y);
Point(){cout << "Point(" << this << ") was deleted." << endl;}
};
#endif
Содержимое файла point.cpp:
#include
using namespace std;
#include "point.h"
void Point::set_coors(int x, int y)
{
this->x = x;
this->y = y;
this->calc_length();
}
void Point::calc_length()
{
this->v_length = sqrt(pow(x, 2) + pow(y, 2));
}
Заголовочный файл university.h:
#include
#include
#ifndef HEADER_UNICLASS
#define HEADER_UNICLASS
// Класс института для легенды
class University
{
private:
string uni_name;
public:
University(string name) : uni_name(name) {};
string get_name() const { return uni_name; }
};
// Базовый класс для студента и преподавателя
class Person
{
protected:
string name;
string last_name;
unsigned short age;
public:
Person(string name, string last_name, unsigned short age)
: name(name), last_name(last_name), age(age)
{}
};
// Класс студента
class Student : public Person
{
friend class Teacher;
private:
int group;
const University& university;
vector<Teacher*> teachers;
public:
Student(string name,string last_name, unsigned short age, const University& university,int group)
: Person(name, last_name, age), group(group), university(university);
Student();
};
// Класс преподавателя
class Teacher : public Person
{
// Описание друж. функции
friend size_t get_students(const Teacher& teacher);
private:
string specialization;
vector<Student*> students;
const University& university;
public:
Teacher(string name, string last_name, unsigned short age, const University& university,string specialization)
: Person(name, last_name, age);
string get_name()const { return last_name +" " + name; }
// Добавление студента
void add_student(Student* stu);
// Удаление студента
void drop_student(const Student* std);};
#endif
Содержимое файла university.cpp:
#include
using namespace std;
#include "university.h"
// Конструктор класса студента
Student::Student(string name,string last_name, unsigned short age, const University& university,int group)
: Person(name, last_name, age), group(group), university(university)
{
printf("Student: %s %s joined to group [%u] of the %s\n",
last_name.c_str(), name.c_str(),group,university.get_name().c_str());
}
// Констркутор класса преподавателя
Teacher::Teacher(string name, string last_name, unsigned short age, const University& university,string specialization)
: Person(name, last_name, age), university(university),specialization(specialization)
{
printf("Teacher: %s %s joined to the %s as %s-teacher\n",
last_name.c_str(), name.c_str(),university.get_name().c_str(),specialization.c_str());
}
void Teacher::add_student(Student* stu)
{
stu->teachers.push_back(this);
students.push_back(stu);
};
// Десктрутор студента. При удалении сообщает всем преподавателям
Student::Student()
{
printf("Student: %s %s left the %s\n",
last_name.c_str(), name.c_str(), university.get_name().c_str());
for (Teacher* t : teachers)
{
t->drop_student(this);
}
}
// Удаление студента
void Teacher::drop_student(const Student* std)
{
for (auto it = students.begin(); it != students.end(); it++)
{
if (*it == std) { students.erase(it); break; }
}
}
// Определение дружественной функции по получению студентов у преподавателя
size_t get_students(const Teacher& teacher)
{
return teacher.students.size();
}
Содержимое файла main.cpp:
#include
#include "university.h"
#include "point.h"
using namespace std;
void ex1()
{
printf("Exercise 1\n");
Point a(10, 23);
Point b(-5, -8);
cout << a.vector_length() << endl;
a.set_coors(-3, 0);
b.set_coors(0, 0);
cout << a.vector_length() << endl;
cout << b.get_x() << endl;
}
void ex2()
{
printf("Exercise 2\n");
University spbgut("SPBGUT");
Teacher t1("Andrey", "Kolobkov", 34, spbgut, "Mathematics");
Teacher t2("Mikhail", "Lermontov", 48, spbgut, "History");
Student* students = new Student[6]{
{"Vitaliy","Mamonov",18,spbgut,1},
{"Dmitriy","Lastochkin",19,spbgut,1},
{"Evgeniy","Chernov",19,spbgut,2},
{"Anastasia","Mironova",19,spbgut,2},
{"Sergey","Markov",18,spbgut,1},
{"Andrey","Kondylev",20,spbgut,2} };
t1.add_student(&students[0]);
t1.add_student(&students[1]);
t1.add_student(&students[4]);
t2.add_student(&students[2]);
t2.add_student(&students[3]);
t2.add_student(&students[5]);
printf("Number of students at %s: %zu\n",t1.get_name().c_str(), get_students(t1));
printf("Number of students at %s: %zu\n", t2.get_name().c_str(), get_students(t2));
delete[] students;
}
int main()
{
setlocale(LC_ALL, "ru");
ex1();
ex2();
return 0;
}
Вывод программы: