Наслідування. Створення та використання ієрархії класів в С++
Звіт про виконання лабораторної роботи
“Об’єктно-орієнтоване програмування”
Тема: Наслідування. Створення та використання ієрархії класів в С++
Кафедра програмного забезпечення
Мета. Навчитися використовувати наслідування у С++. Створити та використати ієрархію класів для віконного застосування
Теоретичні відомості
У С++ існує можливість створення ієрархію класів, така можливість називається наслідуванням, і є однією з основних принципів ООП, а саме поліморфізмом. Таким чином можна створити клас, який матиме властивості якогось іншого (вищого по ієрархії). Дочірньому класу можна надати інші параметри та перевизначити вже оголошені у головному класі функції.
Приклад:
Class Dog
{
private:
float some;
protected:
int Weight;
int Age;
void Speak() {cout<<”Dog Speak…”<<endl;}
};
Class Fido : public Dog
{
int private: int NumTricks;
public:
void Speak(){cout<<”Fido Speak”<<endl;}
};
У наведеному прикладі клас Fido наслідує клас Dog, використовується публічний тип наслідування всього існує 3 типи наслідування: public, private, protected.
Завдання для лабораторної роботи
Розробити ієрархію класів згідно отриманого завдання та описати їх алгоритмічною мовою С++. Написати фрагмент програми з використанням об’єктів створених класових типів. Надрукувати назви класів, використовуючи об‘єкти створених класів.
Плоскі фігури: прямокутник, трикутник, коло, еліпс, паралелограм, квадрат, правильний трикутник, ромб.
Вихідний код
Unit2.h
//—————————————————————————
#include <vcl.h>
#include <math.h>
#include “Unit1.h”
#ifndef Unit2H
#define Unit2H
class Object
{
protected:
AnsiString Name;
public :
Object():Name(“Object”){}
~Object(){}
AnsiString GetName()const {return Name;}
};
class Triangle:public Object
{
private:
float a;
float b;
float c;
public:
float GetPerum(){return a+b+c;}
float GetS(){float p = a+b+c/2; return sqrt(p*(p-a)*(p-b)*(p-c));}
Triangle():Object(),a(0),b(0),c(0){Name = “Triangle”;}
Triangle(float _a, float _b, float _c):Object(),a(_a),b(_b),c(_c)
{
Name = “Triangle”;
}
Triangle(float _a):a(_a),b(_a),c(_a)
{
Name = “Triangle”;
}
~Triangle(){}
};
class MRectangle:public Object
{
private:
float a;
float b;
int alfa;
int beta;
public:
MRectangle():Object(),a(0),b(0){Name = “Rectangle”;}
float GetS(){return a*b;}
float GetPerum(){return a*2+b*2;}
//pryam————–
MRectangle(float _a, float _b):
Object(),a(_a),b(_b),alfa(90), beta(90)
{
Name = “Rectangle”;
}
//paralelogram
MRectangle(float _a,float _b,int _alfa):
Object(),a(_a),b(_b),alfa(_alfa)
{
alfa = _alfa;
beta = (360-(alfa*2))/2;
Name = “Rectangle”;
}
//kvadrat
MRectangle(float _a):
Object(),a(_a),b(_a),alfa(90),beta(90)
{
Name = “Rectangle”;
}
//romb
MRectangle(float _a,int _alfa,int g, int r):
Object(),a(_a),b(_a),alfa(_alfa)
{
beta = (360-(alfa*2))/2;
Name = “Rectangle”;
}
~MRectangle(){}
};
class Circle:public Object
{
private:
float Perum;
float d1;
float d2;
public:
float GetS(){return 3.14*(d1/2)*(d1/2);}
float GetPerum(){return Perum;}
Circle(float _Long,float _d1):Object(),Perum(_Long),d1(_d1),d2(_d1)
{
Name = “Circle”;
}
Circle(float _Long,float _d1,float _d2):Object(),d1(_d1),d2(_d2)
{
Perum=_Long;
Name = “Circle”;
}
~Circle(){}
};
#endif
Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include “Unit1.h”
#include “Unit2.h”
//———————————————————————–#pragma package(smart_init)
#pragma resource “*.dfm”
TForm1 *Form1;
//———————————————————————–__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MRectangle one(StrToFloat(Edit1->Text),StrToFloat(Edit2->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MRectangle one(StrToFloat(Edit1->Text),StrToFloat(Edit2->Text),StrToInt(Edit3->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
MRectangle one(StrToFloat(Edit1->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
MRectangle one(StrToFloat(Edit1->Text),StrToInt(Edit2->Text),1,1);
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Triangle one(StrToFloat(Edit1->Text),StrToFloat(Edit2->Text),StrToFloat(Edit5->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button6Click(TObject *Sender)
{
Triangle one(StrToFloat(Edit1->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button7Click(TObject *Sender)
{
Circle one(StrToFloat(Edit1->Text),StrToFloat(Edit2->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
void __fastcall TForm1::Button8Click(TObject *Sender)
{
Circle one(StrToFloat(Edit1->Text),StrToFloat(Edit2->Text),StrToFloat(Edit5->Text));
Label3->Caption = one.GetPerum();
Label4->Caption = one.GetS();
Label6->Caption = one.GetName();
}
Висновок
На даній лабораторній роботі я навчився використовувати наслідування у С++. Створювати та використати ієрархію класів для віконного застосування.