Отчеты по лабам / Лабораторная №4 Акименко
.docxДисциплина: Объектно-ориентированное программирование
Группа: ИКПИ-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 - Результат работы программы