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

Отчеты по лабам / Лабораторная №4 Акименко

.docx
Скачиваний:
8
Добавлен:
20.12.2021
Размер:
305.12 Кб
Скачать

Дисциплина: Объектно-ориентированное программирование

Группа: ИКПИ-02

Акименко Полина

Вариант 2

ЛАБОРАТОРНАЯ РАБОТА N 4

ОТНОШЕНИЕ НАСЛЕДОВАНИЯ

1. Постановка задачи

Дополнить систему, состоящую из трех классов COne, CTwo и CThree, которые были разработаны в лабораторной работе 3, новым классом CFour. Новый класс должен быть связан public наследованием с классом CThree. Класс CFour должен иметь одно поля, которое я сделала float*. Для разрабатываемого класса написать конструкторы умолчания, с параметрами и конструктор копирования, деструктор, методы доступа и метод print(). Метод print() в классах CTwo, CThree и CFour должен быть виртуальным. Написать тестовую программу для проверки работоспособности разработанных классов. Разработать глобальную функцию printAll(), имеющую два параметра: массив указателей типа CTwo* и количество элементов в этом массиве int n.

В тестовой программе массив указателей должен быть инициализирован адресами объектов типа CTwo, CThree и CFour.

2. Исходный код

Файл COne.h:

#pragma once

#include <string>

class COne {

public:

int n;

std::string s;

COne();

COne(int arg1, std::string arg2);

COne(const COne& arg);

COne& operator=(const COne& arg);

int get_n();

std::string get_s();

void set_n(int arg);

void set_s(std::string arg);

void print();

};

Файл COne.cpp:

#include <stdio.h>

#include <string>

#include "COne.h"

COne::COne() : n(0), s("default init") {}

COne::COne(int arg1, std::string arg2) : n(arg1), s(arg2) {}

COne::COne(const COne& arg) {

n = arg.n;

s = arg.s;

}

COne& COne:: operator=(const COne& arg) {

n = arg.n;

s = arg.s;

return *this;

}

int COne::get_n()

{

return n;

}

std::string COne::get_s()

{

return s;

}

void COne::set_n(int arg)

{

n = arg;

}

void COne::set_s(std::string arg)

{

s = arg;

}

void COne::print()

{

printf("n = %d; s = %s\n", n, s.c_str());

}

Файл CTwo.h:

#pragma once

#include "COne.h"

#include <stdlib.h>

class CTwo {

public:

long long int l;

COne obj;

CTwo();

CTwo(long long int arg1, COne arg2);

CTwo(const CTwo& arg);

CTwo& operator=(const CTwo& arg);

long long int get_l();

COne get_obj();

void set_l(long long int arg);

void set_obj(COne arg);

virtual void print();

};

Файл CTwo.cpp:

#include "CTwo.h"

CTwo::CTwo() : l(0) {}

CTwo::CTwo(long long int arg1, COne arg2) : l(arg1), obj(arg2) {}

CTwo::CTwo(const CTwo& arg) {

l = arg.l;

obj = arg.obj;

}

CTwo& CTwo::operator=(const CTwo& arg)

{

l = arg.l;

obj = arg.obj;

return *this;

}

long long int CTwo::get_l()

{

return l;

}

COne CTwo::get_obj()

{

return obj;

}

void CTwo::set_l(long long int arg)

{

l = arg;

}

void CTwo::set_obj(COne arg)

{

obj = arg;

}

virtual void CTwo::print()

{

printf("l = %d; obj: ", l);

obj.print();

}

Файл CThree.h:

#pragma once

#include "COne.h"

#include "CTwo.h"

class CThree : public CTwo {

public:

bool f;

CThree();

CThree(bool arg1, long long int arg2, COne arg3);

CThree(const CThree& arg);

bool get_f();

void set_f(bool arg);

virtual void print();

};

Файл CThree.cpp:

#include <stdio.h>

#include <string>

#include "COne.h"

#include "CTwo.h"

#include "CThree.h"

CThree::CThree() : f(true) {}

CThree::CThree(bool arg1, long long int arg2, COne arg3)

{

f = arg1;

l = arg2;

obj = arg3;

}

CThree::CThree(const CThree& arg)

{

f = arg.f;

l = arg.l;

obj = arg.obj;

}

bool CThree::get_f() {

return f;

}

void CThree::set_f(bool arg)

{

f = arg;

}

virtual void CThree::print()

{

f ? printf("f = true; ") : printf("f = false; ");

printf("l = %d; obj: ", l);

obj.print();

}

Файл CFour.h:

#pragma once

#include "CThree.h"

class CFour : public CThree {

private:

float* fp;

public:

CFour();

CFour(float arg1, bool arg2, long long int arg3, COne arg4);

CFour(const CFour& arg);

~CFour();

float get_fp();

void set_fp(float arg);

virtual void print();

};

Файл CFour.cpp:

#include <stdio.h>

#include <string>

#include "CFour.h"

CFour::CFour()

{

fp = new float;

*fp = 1.5;

f = true;

l = 0;

}

CFour::CFour(float arg1, bool arg2, long long int arg3, COne arg4)

{

fp = new float;

*fp = arg1;

f = arg2;

l = arg3;

obj = arg4;

}

CFour::CFour(const CFour& arg)

{

fp = new float;

*fp = *arg.fp;

f = arg.f;

l = arg.l;

obj = arg.obj;

}

CFour::~CFour()

{

delete fp;

}

float CFour::get_fp()

{

return *fp;

}

void CFour::set_fp(float arg)

{

*fp = arg;

}

virtual void CFour::print()

{

printf("fp value = %d; value at fp = %f", fp, *fp);

f ? printf("f = true; ") : printf("f = false; ");

printf("l = %d; obj: ", l);

obj.print();

}

Файл main.cpp:

#include <stdio.h>

#include <string>

#include "COne.h"

#include "CTwo.h"

#include "CThree.h"

#include "CFour.h"

void printAll(CTwo** arr, int n)

{

for (int i = 0; i < n; i++)

{

printf("object of index %d: ", i);

arr[i]->print();

}

}

int main()

{

{

COne object1;

object1.print();

COne object2(6, "test");

COne object3(object2);

object3.print();

object3 = object1;

object3.print();

object2.set_n(object2.get_n() + 4);

object2.set_s(object2.get_s() + " number 2");

object2.print();

}

printf("\n");

{

CTwo object1;

object1.print();

COne arg(26, "arg test");

CTwo object2(16, arg);

CTwo object3(object2);

object3.print();

object3 = object1;

object3.print();

object2.set_l(object2.get_l() + 4);

COne arg2(object2.get_obj().get_n() + 4, "arg2 test");

object2.set_obj(arg2);

object2.print();

}

printf("\n");

{

CThree object1;

object1.print();

COne arg(6, "test");

CThree object2(false, 46, arg);

CThree object3(object2);

object3.print();

object3.set_f(!object3.get_f());

object3.print();

}

printf("\n");

{

CFour object1;

object1.print();

COne arg(6, "test");

CFour object2(0.6, false, 46, arg);

CFour object3(object2);

object3.print();

object3.set_fp(object3.get_fp() + 0.5);

object3.print();

}

printf("\n");

{

CTwo object1;

CThree object2;

CFour object3;

CTwo* arrArg[3];

arrArg[0] = &object1;

arrArg[1] = &object2;

arrArg[2] = &object3;

printAll(arrArg, 3);

}

system("pause");

}

3. Скриншоты работы программы

Рисунок 1 - Результат работы программы