Безкоштовно

Наслідування. Створення та використання ієрархії класів в С++

views 31

Звіт про виконання лабораторної роботи

“Об’єктно-орієнтоване програмування”

Тема: Наслідування. Створення та використання ієрархії класів в С++

Кафедра програмного забезпечення

Мета. Навчитися використовувати наслідування у С++.  Створити та використати ієрархію класів для віконного застосування

Теоретичні відомості

У С++ існує можливість створення ієрархію класів, така можливість називається наслідуванням, і є однією з основних принципів ООП, а саме поліморфізмом. Таким чином можна створити клас, який матиме властивості якогось іншого (вищого по ієрархії). Дочірньому класу можна надати інші параметри та перевизначити вже оголошені у головному класі функції.

Приклад:

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();

}

Висновок

На даній лабораторній роботі я навчився використовувати наслідування у С++.  Створювати та використати ієрархію класів для віконного застосування.

Написати коментар:

Ваша пошт@ не публікуватиметься. Обов’язкові поля позначені *