Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
звіт з ООП(практика)Шклярський Ігор.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.09 Mб
Скачать

Void main()

{

setlocale (LC_ALL,".1251");

Mob Obj;

Mob ObA(21);

Mob Ob=ObA;

Fun(Obj);

Mob a;

a=h(14);

getch();

}

Результат виконання програми:

Тема № 8. Перевантаження операторів.

Завдання

  1. Перевантажити для класу оператори «++», «-»,«=», «*», «==», «()».

Лістинг програми:

#include <iostream>

#include <conio.h>

using namespace std;

class Teh

{

int x,value;

public:

Teh(){x=0;}

Teh(int a){x=a;}

Teh operator-(Teh Obj);

Teh operator*(Teh Obj);

Teh operator =(Teh Obj);

Teh operator ++(); //Префіксна форма

Teh operator ++(int); // Постфіксна форма

bool operator ==(Teh Obj);

Teh operator ()(int a);

void show (char*s);

};

Teh Teh::operator()(int a) //Перевизначення оператора визначення функції ()

{

Teh obz; //Тимчасовий об'єкт

obz.x=x+a;

return obz; //Повертає тимчасовий модифікований об'єкт

}

bool Teh::operator==(Teh obj)

{

if (x==obj.x)

return true;

else

return false;

}

Teh Teh:: operator -(Teh Obj)

{

Teh obz;

obz.x=x-Obj.x;

return obz;

}

Teh Teh:: operator *(Teh Obj)

{

Teh obz;

obz.x=x*Obj.x;

return obz;

}

Teh Teh:: operator =(Teh Obj)

{

x=Obj.x;

return *this;

}

Teh Teh:: operator ++() //Перевизначення префіксної форми

{

x++;

return*this;

}

Teh Teh::operator++(int notused) //Перевизначення постфіксної форми

{

Teh obz=*this; //Збереження почтаквого значення об'єкта

x++;

return obz; //Повернення початкового значення об'єкта

}

void Teh::show(char*s)

{

cout<<"Сeрiйний номер телефону `"<<s<<"`"<<endl;

cout<<"x= "<<x<<endl;

}

int main()

{

setlocale (LC_ALL,".1251");

Teh ObjA(2222),ObjB(1111),ObjC;

ObjA.show("A");

ObjB.show("B");

ObjC=ObjA-ObjB;

ObjC.show("c=a-b ");

ObjC=ObjA*ObjB;

ObjC.show("a*c");

++ObjC; //Префіксна форма

ObjC.show("++c(префiксна форма)");

ObjC++; //Постфіксна форма

ObjC.show("c++(постфiксна форма)");

if (ObjA==ObjB)

cout<<"A=B"<<endl;

else

cout<<"A не дорiвнює B "<<endl;

ObjB=ObjA(3333) ; //Виклик фукції operator()

ObjA.show("A()");

ObjB.show("B()");

getch();

return 0;

}

Результат виконання програми:

Тема № 9. Використання віртуальних функцій.

Завдання

  1. Оголосити у базовому класі віртуальну функцію.

  2. Перевизначити віртуальну функцію у похідних класах.

Лістинг програми:

#include <iostream>

#include <conio.h>

using namespace std;

class Teh

{

public:

virtual void func(){cout<<"Технiка "<<endl;}

};

class Mob:public Teh

{

public:

void func(){cout<<"Мобiльний телефон "<<endl;}

};

class RTel:public Teh

{

public:

void func(){cout<<"Радiо-телефон "<<endl;}

};

Void main()

{

setlocale (LC_ALL,".1251");

Teh objA;

Teh *bp;

Mob objB;

RTel objC;

bp=&objA;

bp->func();

bp=&objB;

bp->func();

bp=&objC;

bp->func();

system("pause");

}

Результат виконання програми:

Тема № 10. Обробка виняткових ситуацій.

Завдання

  1. Створити функцію-обробник виняткових ситуацій. Функція повинна приймати один параметр-ціле число, яке вводиться з клавіатури. В залежності від того, який номер введений згенерувати цілочисельну, дійсну, символьну помилкову ситуацію.

  2. Визначити обробники всіх виняткових ситуацій.

  3. Створити три ієрархічні класи. Визначити приховані поля та методи доступу до них.

  4. Створити меню з 5 пунктів: згенерувати помилку базового класу , згенерувати помилку похідного класу, згенерувати помилку похідного від похідного класу, згенерувати помилку функції, вихід.

Лістинг програми:

#include <iostream>

#include <conio.h>

#include <cstring>

#include <string>

using namespace std;

class Teh

{

int aT;

public:

void funcT(int a){aT=a;cout<<"Error base class Teh"<<endl

<<" code Teh-"<<aT<<" not exist"<<endl;}

};

class Mob:public Teh

{

int aM;

public:

void funcM(int s) {aM=s;cout<<"Error derived class Mod"<<endl;

cout<<" diagonal > "<<aM<<"x"<<aM<<endl;}

};

class RTel:public Mob

{

int aR;

public:

void funcRT(int s){aR=s;cout<<"Error derived from derived class RTel "<<endl

<<" range of the phone is less than <"<<aR<<" km"<<endl;}

};

void obrob(int a)

{

try

{

if(a==1)

throw a;

if (a==2)

throw 1.1;

else

throw "a" ;

}

catch(int c){cout<<"Перехоплення цiло чисельного типу даних. "<<endl;}

catch(double c){cout<<"Перехоплення дiсного типу даних. "<<endl;}

catch(char*str){cout<<"Перехоплення символьного типу даних. "<<endl;}

}

int main()

{

setlocale (LC_ALL,".1251");

int a,response;

Teh o; Mob ob; RTel obi;

cout<<"1.Помилка класу Teh"<<endl

<<"2.Помилка класу Mob"<<endl

<<"3.Помилка класу RTel"<<endl

<<"4.Помилка функцiї obrob"<<endl

<<"0.Вихiд"<<endl;

cin>>response;

try

{

switch(response)

{

case 1:

o.funcT(567897);

throw o;

break;

case 2:

ob.funcM(2);

throw ob;

break;

case 3:

obi.funcRT(1000);

throw obi;

break;

case 4:

cout<<"1.Цiлочисельний тип даних"<<endl

<<"2.Дiсний тип даних"<<endl

<<"3.Символьний тип даних"<<endl;

cout<<"Введiть номер згенеорваною ситуацiї: ";

cin>>a;

obrob(a);

cin>>a;

obrob(a);

cin>>a;

obrob(a);

break;

case 0:

return 0;

break;

}

}

catch(...)

{

}

system("pause");

}

Результат виконання програми:

Висновок:

За час навчальної практики з предмету «Об’єктно-орієнтоване програмування» я набув і закріпив практичні навички з базового програмування,

виконав програму практики яка передбачає виконання індивідуальних завдань з тем, наведених у тематичному плані.

У результаті проходження практики я:

  • закріпив та підтвердив знання мови С++;

  • створював класи, їх атрибути і методи;

  • використовував конструктори, деструктори, перевантажені оператори;

  • створював inline-функції;

  • описував і використовував статичні члени класів;

  • описував та використовував дружні (friend) функції класів та дружні класи;

  • застосовував при розробці класів інкапсуляцію, поліморфізм та наслідування;

  • застосовував віртуальні функції та абстрактні класи;

  • обробляв виняткові ситуації.

Список використаної літератури:

  • «ОБ'ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ МОВОЮ С++» Юрій ГРИЦЮК, Тарас РАК

  • «Програмування на С++»

Дірк Хенкеманс, Марк Лі

  • http://progcpp.blog.net.ua/

  • http://uk.wikipedia.org/wiki/%D0%92%D1%96%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4

  • http://isblog.com.ua/2012-12_virtual_functions_in_cpp#.UWLGMKJ7LkU

  • http://www.c-cpp.ru/books/inline-funkcii

  • http://cppstudio.com/uchebniki/yazyk-programmirovaniya-s/vstroennye-funkcii-v-c/

22