Класи та об`єкти

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Програмування та алгоритмічні мови

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „ Львівська політехніка “ Кафедра ЕОМ Звіт З Лабораторної роботи №4:“ Класи та об`єкти ” Лабораторна робота № 4 Класи та об’єкти МЕТА РОБОТИ: ПОЗНАЙОМИТИСЯ ІЗ КЛАСАМИ ТА ОБ’ЄКТАМИ. Короткі теоретичні відомості Визначення класу У мові C++ основна увага приділяється створенню нових визначених користувачем типів, що називаються класами. Клас – це визначений користувачем тип з даними-елементами та функціями-елементами (методами), що являються членами класу. Змінна типу клас називається об’єктом. Оголошення класу в мові С++ може мати наступний формальний опис: class ім'я_класу : список_базових_класів { publіc: // Оголошення загальнодоступних членів класу protected: // Оголошення членів класу, доступних // тільки для похідних класів prіvate: // Оголошення захищених членів класу };   Члени класу, оголошені після ключового слова publіc стають відкритими членами. Це означає, що вони доступні як для інших членів класу і його друзів, так і для користувачів класу. Члени класу, оголошені після ключового слова prіvate, стають закритими членами. Вони доступні тільки для інших членів того ж класу і друзів класу. Члени класу, оголошені після ключового слова protected, стають захищеними членами. Вони доступні тільки для інших членів того ж класу, членів класів, похідних від даного, і друзів класу. Оголошення класу містить оголошення даних-елементів та функцій-елементів класу. Оголошення функцій-елементів є прототипами функцій. Сама ж реалізація функції-елементів може знаходитись як усередині класу, так і поза визначенням класу. Але один з найбільш фундаментальних принципів розробки програмного забезпечення полягає у розмежуванні інтерфейсу класу від його реалізації. Тому при побудові програми на C++ кожне оголошення класу зазвичай розміщують у файл *.h , а реалізацію функцій-елементів цього класу – у файл *.cpp із тими ж іменами. Заголовочні файли включаються (за допомогою #іnclude) у кожен файл, у якому використовується клас, а файли з вихідними кодами компілюються і компонуються з файлом, що містить головну програму. При визначенні методу класу необхідно зв'язати ім'я відповідного методу з ім'ям класу. Зв'язок встановлюється шляхом написанням перед ім'ям методу імені класу та оператора розширення області видимості (::). Оскільки різні класи можуть мати елементи з однаковими іменами, то оператор розширення області видимості дозволяє однозначно ідентифікувати функції-елементи конкретного класу. тип ім’яКласу :: ім’яМетоду (списокПараметрів) { //тіло метода }   Дані-елементи та функції-елементи класу мають областю дії клас. При області дії клас елементи класу безпосередньо доступні усім функціям-елементам цього класу і на них можна посилатися просто по імені. Конструктори та деструктор Після створення об'єкта його елементи можуть бути ініціалізовані за допомогою функції конструктора. Конструктор – це функція-елемент класу із тим же ім'ям, що і клас. Конструктор автоматично викликається при створенні об'єкта конкретного класу. У класі може бути визначено кілька конструкторів, що відрізняються списком параметрів. При створенні об'єкта викликатися буде тільки один з них. Який саме – визначається зі способу створення об'єкта. Конструктор без параметрів або конструктор, у якого всі аргументи – це аргументи за замовчуванням, має спеціальну назву – конструктор за замовчуванням. Конструктор, що як свій єдиний параметр приймає посилання на постійний об'єкт цього ж класу, зветься конструктором копіювання. Він призначений для створення копії існуючого об'єкта і викликається при ініціалізації в операторі оголошення об'єкта або при передачі об'єкта класу за значенням у функцію (метод). Деструктор – це спеціальна функція-елемент класу. Ім'я деструктора збігається з ім'ям класу, але перед ним ставиться символ тильда (~). Деструктор класу викликається при знищенні об'єкта – наприклад, коли виконувана програма залишає область дії, у якій був створений об'єкт цього класу. Насправді деструктор сам не знищує об'єкт – він виконує підготовку завершення перед тим, як система звільняє область пам'яті, у якій зберігався об'єкт, щоб використовувати її для розміщення нових об'єктів. Деструктор не приймає жодних параметрів і не повертає жодних значень. Клас може мати тільки один деструктор – перевантаження деструктора не дозволяється. Конструктори глобальних об'єктів викликаються перед тим як будь-яка функція даного файлу (включаючи maіn) почне виконуватися. Відповідні деструктори викликаються, коли завершується maіn або коли викликається функція exіt. Конструктори автоматичних локальних об'єктів викликаються, коли процес виконання досягає місця, де об'єкти з'являються. Відповідні деструктори викликаються, коли покидається область дії об'єктів (тобто покидається блок, у якому ці об'єкти оголошені). Конструктори і деструктори для автоматичних об'єктів викликаються щораз при вході і виході з області дії. Конструктори статичних локальних об'єктів викликаються відразу ж, як тільки процес виконання досягає місця, де об'єкти були вперше оголошені. Відповідні деструктори викликаються, коли завершується maіn або коли викликається функція exіt. Методи доступу до об’єкта Змінна класу (екземпляр класу) оголошується у відповідності з наступним синтаксисом: Ім’яКласу ім’яЗмінної(списокПараметрів);   При оголошенні змінної відбувається створення відповідного об'єкта. При цьому виконується виклик одного з конструкторів класу цього об'єкта. Для доступу до елементів об'єкта використовується операція крапка (.). Доступ до об'єкта можна одержати через вказівник на цей об'єкт. При цьому до членів об'єкта звертаються за допомогою оператора "стрілка" (->). ім’яКлассу * ім’яЗмінної = new ім’яКлассу (списокПараметрів);   У даному випадку з вільної пам'яті виділяється ділянка пам'яті, достатня для збереження об'єкта зазначеного класу. Для створеного об'єкта автоматично викликається конструктор із заданими значеннями параметрів. Як результат, оператор new повертає адресу створеного об'єкта, яка зберігається у вказівнику. Згодом, доступ до динамічно створеного об'єкта здійснюється через цей вказівник. Після того, як динамічно створений об'єкт стає непотрібним, його необхідно знищити. Знищення об'єкта приводить до виклику деструктора, звільненню пам'яті, відведеної під даний об'єкт і поверненню цієї пам'яті у вільну пам'ять. Знищення динамічно створеного об'єкта здійснюється оператором delete. C++ містить спеціальний покажчик thіs. Це вказівник, що неявно автоматично передається будь-якому методові класу при його виклику і вказує на об'єкт, для якого метод був викликаний. Ще одним способом доступу до об'єкта є доступ через посилання. Посилання є прихованим покажчиком і у всіх випадках його можна використовувати просто як ще одне ім'я об’єкта. ім’яКлассу & ім’яЗмінної;   Приклад класу наведено нижче. // Rectangle.h: interface for the Rectangle class. // class Rectangle { private: double length; double width; public: //конструктор по замовчуванню Rectangle(double l = 1, double w = 1); // конструктор копіювання Rectangle(const Rectangle & rect); // деструктор virtual ~Rectangle(); double GetLength(); double GetWidth(); void PutLength(double); void PutWidth(double); double Area(); double Perimeter(); }; // Rectangle.cpp: implementation of the Rectangle class. // #include "Rectangle.h" Rectangle::Rectangle(double l, double w ) { length = l; width = w; } Rectangle::Rectangle(const Rectangle & rect) { *this = rect; } Rectangle::~Rectangle() { } double Rectangle::GetLength() { return length; } double Rectangle::GetWidth() { return width; } void Rectangle::PutLength(double l) { length = l; } void Rectangle::PutWidth(double w) { width = w; } double Rectangle::Area() { return length * width; } double Rectangle::Perimeter() { return 2.0 * (length + width); } // main.cpp // #include<iostream.h> #include"Rectangle.h" int main() { Rectangle rec1; cout << "rec1" << endl; cout << "length = " << rec1.GetLength() << endl; cout << "width = " << rec1.GetWidth() << endl; cout << "area = " << rec1.Area() << endl; Rectangle rec2(10,10); cout << "rec2" << endl; cout << "length = " << rec2.GetLength() << endl; cout << "width = " << rec2.GetWidth() << endl; cout << "area = " << rec2.Area() << endl; Rectangle rec5(rec2); cout << "rec5" << endl; cout << "length = " << rec5.GetLength() << endl; cout << "width = " << rec5.GetWidth() << endl; cout << "area = " << rec5.Area() << endl; Rectangle rec6; rec6 = Rectangle(6,3); cout << "rec6" << endl; cout << "length = " << rec6.GetLength() << endl; cout << "width = " << rec6.GetWidth() << endl; cout << "area = " << rec6.Area() << endl; Rectangle* rec7; rec7 = new Rectangle(2,3); cout << "rec6" << endl; cout << "length = " << rec7->GetLength() << endl; cout << "width = " << rec7->GetWidth() << endl; cout << "perimeter = " << rec7->Perimeter() << endl; delete rec7; Rectangle & rec8 = rec1; cout << "rec8" << endl; cout << "length = " << rec8.GetLength() << endl; cout << "width = " << rec8.GetWidth() << endl; cout << "perimeter = " << rec8.Perimeter() << endl; return 0; } Результати виконання: rec1 length = 1 width = 1 area = 1 rec2 length = 10 width = 10 area = 100 rec5 length = 10 width = 10 area = 100 rec6 length = 6 width = 3 area = 18 rec6 length = 2 width = 3 perimeter = 10 rec8 length = 1 width = 1 perimeter = 4   Завдання Створити оголошення класу згідно варіанту та розробити програму-драйвер, яка продемонструє роботу класу. Задача: Клас Triangle (трикутник). Клас зберігає Декартові координати трьох кутів трикутника. Конструктор приймає три групи координат. Повинні бути передбачені функції-елементи, що обчислюють периметр і площу, а також функція, що перевіряє чи трикутник є прямокутним. Програма Main #include "triangle.h" #include<iostream> #include<time.h> using namespace std; void main() { int t ; char j='A'; float x[3],y[3]; srand(time(NULL)); setlocale(0,""); start: { cout<<"\nВиберiть режим роботи:\n 1-Ввiд вручну \n 2-Довiльний ввiд комп'ютером\n 3-Вихiд\n"; cin>>t; } switch (t){ case 1 : { cout<<"\n Введiть координати трикутника ABC\n"; for(int i=0;j<'D';i++,j++) { cout<<" Точка "<<j<<" з координатами :\n x = "; cin>>x[i]; cout<<" y = "; cin>>y[i]; } triangle tri(x,y); tri.Properties(); break; } case 2 : { cout<<" Kоординати трикутника ABC\n"; for(int i=0;j<'D';i++,j++) { x[i]=rand()%100/(rand()%10 +1); y[i]=rand()%100/(rand()%10 +1); cout<<"\n Точка "<<j<<" з координатами :\n x = "<<x[i]<<"\n y = "<<y[i]<<endl; } triangle tri(x,y); tri.Properties(); break; } case 3 : break; default : { cout<<"\n Ввiд неправельний\n\n"; goto start; break; } } cout<<endl; } Triangle.cpp #include "triangle.h" #include <iostream> #include <math.h> using namespace std; triangle::triangle( float a[3] , float b[3] ) { for(int i=0 ; i<3 ; i++) { x[i]=a[i]; y[i]=b[i]; } l1=sqrt((x[0]-x[1])*(x[0]-x[1])+(y[0]-y[1])*(y[0]-y[1])); l2=sqrt((x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2])); l3=sqrt((x[2]-x[0])*(x[2]-x[0])+(y[2]-y[0])*(y[2]-y[0])); } triangle::~triangle(void) { } float triangle::Area() { cosl=( l2*l2 + l3*l3 -l1*l1)/(2*l2*l3); sinl=sqrt(1-cosl*cosl); return ( l2*l3*sinl)/2; } float triangle::Perimeter() { return l1+l2+l3; } void triangle::Properties() { float c,g,h; c=sqrt(1-( (l2*l2 + l3*l3 -l1*l1)/(2*l2*l3))*( (l2*l2 + l3*l3 -l1*l1)/(2*l2*l3)) ); g=sqrt(1-( (l1*l1 + l3*l3 -l2*l2)/(2*l1*l3))*( (l1*l1 + l3*l3 -l2*l2)/(2*l1*l3)) ); h=sqrt(1-( (l2*l2 + l1*l1 -l3*l3)/(2*l2*l1))*( (l2*l2 + l1*l1 -l3*l3)/(2*l2*l1)) ); if( ( c == 1 )||( h ==1 )||( g == 1 ) ) cout<<" Трикутник прямокутний \n"; else cout<<"Трикутник не прямокутний \n"; cout<<" Площа дорвiнює : "<<Area()<<endl; cout<<" Периметр дорiвнює : "<<Perimeter()<<endl; } Triangle.h #pragma once class triangle { public: triangle( float a[3] , float b[3] ); ~triangle(void); float Area(); float Perimeter(); char Equilateral(); void Properties(); private: float x[3],y[3],l1,l2,l3,cosl,sinl; }; / / Висновок: На даній лабораторній роботі я познайомився із класами та о’єктами.
Антиботан аватар за замовчуванням

28.01.2013 16:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!