Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

oop2

.docx
Скачиваний:
3
Добавлен:
07.04.2025
Размер:
730.54 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное

образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Факультет информатики и робототехники

Кафедра вычислительной математики и кибернетики

Лабораторная работа №2

“Объекты и Классы”

По дисциплине “Объектно-ориентированное программирование”

Выполнил:

Студент группы ПРО-232Б

Ихсанова Э. А.

Проверил:

доцент кафедры ВМиК

Котельников В. А.

Уфа-2023

Цель работы:

Определение и реализация тестовых классов, и написание программы, иллюстрирующей их использование

Задание:

  • Определения

    • классов

    • атрибутов, методов

    • классов-наследников

    • конструкторов (обязательно несколько: без параметров, с параметрами, с параметром-объектом того же класса), деструкторов

    • доступности атрибутов и методов (показать, как влияют модификаторы private, protected, public)

  • Реализация

    • методов объектов

    • реализация методов сразу в определении или после определения

    • конструкторов, деструкторов

  • Создание и использование (обращение к атрибутам, вызов методов)

    • статически создаваемых объектов («MyClass obj;»)

    • динамически создаваемых объектов («MyClass *obj = new MyClass();»)

    • объектов с помощью различных конструкторов (у каждого создаваемого объекта должны быть: конструктор без параметров, с параметрами, с параметром-объектом того же класса – конструктор копирования)

    • инициализация полей класса в списке инициализации конструктора

    • помещение объектов в переменные различных типов (объяснять, чем отличается MyBase * obj = new MyBase() от MyBase * obj = new MyDeriv())

    • объектов классов-наследников (проверить и продемонстрировать, какие конструкторы классов при этом вызываются)

    • композиция объектов: атрибутом одного объекта класса A является другой объект класса B (не указатель!), инициализируемый в списке инициализации конструктора класса A; показать, когда этот объект класса B удаляется

    • композиция объектов: атрибутом одного объекта класса A является указатель на другой объект класса B, создаваемый в конструкторе класса A и уничтожаемый в деструкторе класса A; композируемые классы должны определяться отдельно (не один в другом); при композиции показать, в чем разница, если объект класса А хранит прямо объект класса В или указатель на объект класса В.

  • Уничтожение

    • статически созданных объектов

    • динамически созданных объектов

    • объектов классов-наследников (проверить и продемонстрировать, какие деструкторы классов при этом вызываются)

Х од работы:

Рис. 1 Создание статического объекта и методы

Рис. 2 Создание динамического объекта(наследственный)

Рис. 3 Композиция

Вывод:

В результате выполнения работы было освоено создание классов, создание дочерних классов, композиция, реализация методов внутри и вне описания класса, изменение атрибутов доступа через поля класса, а также удаление объектов класса.

Ссылка на GitHub: https://github.com/eikhovna/oop2

Приложение 1

Листинг программы

#include<iostream>

#include<conio.h>

using namespace std;

class Stasic { //статический объект

protected:

int x, y;

//int a;

public:

Stasic() {

cout << "Stasic() запуск конструктора" << endl;

x = 0;

y = 0;

}

Stasic(int x, int y) {

cout << "Stasic() запуск конструктора с параметром" << endl;

this->x = x;

this->y = y;

}

Stasic(const Stasic& s) {

cout << "Stasic() запуск конструктора копирования" << endl;

x = s.x;

y = s.y;

}

~Stasic() {

cout << x << " " << y << endl;

cout << "Stasic() запуск деструктора" << endl;

}

void move(int dx, int dy) {//метод объекта, определяется сразу

x = x + dx;

y = y + dy;

}

void after();//метод объекта, определяется позже

};

void Stasic::after() {

x = 4;

y = 8;

}

class Dimasik:public Stasic {//динамический объект(наследственный)

protected:

int a;

public:

Dimasik():Stasic() {

cout << "Dimasik() запуск конструктора" << endl;

a = 0;

}

Dimasik(int x, int y, int a):Stasic(x, y) {

cout << "Dimasik() запуск конструктора с параметром" << endl;

this->a = a;

}

Dimasik(const Dimasik& s) {

cout << "Dimasik() запуск конструктора копирования" << endl;

x =s.x;

y = s.y;

a = s.a;

}

~Dimasik() {

cout << x << " " << y << " " << a << endl;

cout << "~Dimasik() запуск деструктора" << endl;

}

};

class Papik {//композиция

protected:

Stasic s,*s2;

public:

Papik() {

cout << "Papik() запуск конструктора" << endl;

s = Stasic();

s2 = new Stasic();

}

Papik(int x, int y, int x1, int y1) {

cout << "Papik() запуск конструктора с параметром" << endl;

s = Stasic(x, y);

s2 = new Stasic(x1, y1);

}

Papik(const Papik& p) {

cout << "Papik() запуск конструктора копирования" << endl;

s =Stasic((p.s));

s2 =new Stasic(*(p.s2));

}

~Papik() {

delete s2;

cout << "~Papik() запуск деструктора" << endl;

}

};

int main()

{

setlocale(LC_ALL, "rus");

{

Stasic s;

Stasic s2(5, 9);

Stasic s3(s2);

}

cout << " " << endl << endl << endl;;

{

Stasic* s = new Stasic;//создание динамических переменных

Stasic* s2 = new Stasic(5, 9);

Stasic* s3 = new Stasic(*s2);

//Stasic* d = new Stasic(5, 9);

//Stasic* d2 = new Stasic(5, 9);

s->move(5, 1);//запуск методов

s2->after();

delete s;//работа деструктора

delete s2;

delete s3;

//delete d;

//delete d2;

}

cout << " " << endl << endl << endl;

{

Dimasik* s1 = new Dimasik();

Dimasik* s = new Dimasik(7, 3, 10);

Dimasik* s2 = new Dimasik(*s);

// Stasic* s3 = new Dimasik(7, 3, 10);//помещение объектов в переменные разных типов

delete s;

delete s1;

delete s2;

// delete s3;

}

cout << " " << endl << endl << endl;;

{

Papik* s = new Papik;

Papik* s2 = new Papik(3, 5, 1, 1);

Papik* s3 = new Papik(*s);

delete s;

delete s2;

delete s3;

}

_getch();

return 0;

}

Соседние файлы в предмете Объектно ориентированное программирование
  • #
    07.04.20251.12 Кб0l7_oop-1.sln
  • #
    07.04.20251.12 Кб0l7_oop.sln
  • #
    07.04.20251.11 Кб3oop.sln
  • #
    07.04.2025337.24 Кб2oop1.docx
  • #
    07.04.2025730.54 Кб3oop2.docx
  • #
    07.04.20251.43 Кб2oop2.sln
  • #
    07.04.202543.2 Кб2oop3.docx
  • #
    07.04.20251.43 Кб1oop3.sln
  • #
    07.04.20251.12 Кб1OOP4.1-1.sln
  • #
    07.04.20251.13 Кб1oop4.1.1.sln