Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба5

.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
65.49 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний університет Львівська політехніка

Інститут ІКНІ

Кафедра ПЗ

ЗВІТ

До лабораторної роботи №5

На тему: Створення та використання класів.”

З дисципліни: “Об’єкно-орієнтоване програмування”

Лектор:

Доцент каф. ПЗ

Коротєєва Є.В.

Виконав:

Студент гр. ПІ-13

Янко А.В.

Прийняв:

Асистент каф. ПЗ

Климаш Т.С.

Львів – 2014

Тема: Створення та використання класів.

Мета: Навчитися створювати класи, використовувати конструктори для

ініціалізації об’єктів, опанувати принципи створення функцій-членів. Навчитися використовувати різні типи доступу до полів та методів класів.

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

Ідея класів має на меті дати інструментарій для відображення будови об’єктів реального світу - оскільки кожен предмет або процес має набір характеристик (відмінних рис) іншими словами, володіє певними властивостями і поведінкою. Програми часто призначені для моделювання предметів, процесів і явищ реального світу, тому в мові програмування зручно мати адекватний інструмент для представлення цих моделей.

Клас є типом даних, який визначається користувачем. У класі задаються властивості і поведінка будь-якого предмету або процесу у вигляді полів даних (аналогічно до того як це є в структурах) і функцій для роботи з ними. Створюваний тип даних володіє практично тими ж властивостями, що і стандартні типи. Конкретні величини типу даних «клас» називаються екземплярами класу, або об'єктами. Об’єднання даних і функцій їх обробки з одночасним приховуванням непотрібної для використання цих даних інформації називається інкапсуляцією (encapsulation). Інкапсуляція підвищує ступінь абстракції програми: дані класу і реалізація його функцій знаходяться нижче рівня абстракції, і для написання програми з використанням вже готових класів інформації про них (дані і реалізацію функцій) не потрібно. Крім того, інкапсуляція дозволяє змінити реалізацію класу без модифікації основної частини програми, якщо інтерфейс залишився тим самим (наприклад, при необхідності змінити спосіб зберігання даних з масиву на стек). Простота модифікації, як уже неодноразово зазначалося, є дуже важливим критерієм якості програми.

Опис класу в першому наближенні виглядає так:

class <ім'я> {

[private:]

<Опис прихованих елементів>

public:

<Опис доступних елементів>

}; //Опис закінчується крапкою з комою.

Специфікатор доступу private і public керують видимістю елементів класу. Елементи, описані після службового слова private, видимі тільки всередині класу. Цей вид доступу прийнятий у класі за замовчуванням. Інтерфейс класу описується після специфікатора public. Дія будь-якого специфікатора поширюється до наступного специфікатора або до кінця класу. Можна задавати кілька секцій private і public, їх порядок значення не має.

Поля класу: можуть мати будь-який тип, крім типу цього ж класу (але можуть бути вказівниками або посиланнями на цей клас);

можуть бути описані з модифікатором const, при цьому вони ініціалізуються тільки один раз (за допомогою конструктора) і не можуть змінюватися;

можуть бути описані з модифікатором static (розглядається в наступних лабораторних).

Ініціалізація полів при описі не допускається.

Конструктори.

  • Конструктор призначений для ініціалізації об’єкту і викликається автоматично при його створенні. Автоматичний виклик конструктора дозволяє уникнути помилок, пов’язаних з використанням неініціалізованих змінних. Нижче наведені основні властивості конструкторів:

  • Конструктор не повертає жодного значення, навіть типу void. Неможливо отримати вказівник на конструктор.

  • Клас може мати декілька конструкторів з різними параметрами для різних видів ініціалізації (при цьому використовується механізм перевантаження).

  • Конструктор без параметрів називається конструктором за замовчуванням.

  • Параметри конструктора можуть мати будь-який тип, крім цього ж класу. Можна задавати значення параметрів за замовчуванням. Їх може містити тільки один з конструкторів.

  • Якщо програміст не вказав жодного конструктора, компілятор створює його автоматично.

Такий конструктор викликає конструктори за замовчуванням для полів класу і конструктори за замовчуванням базових класів. У разі, коли клас містить константи або посилання, при спробі створення об'єкту класу буде видана помилка, оскільки їх необхідно ініціалізувати конкретними значеннями, а конструктор за замовчуванням цього робити не вміє.

  • Конструктори не наслідуються.

  • Конструктори не можна описувати з модифікаторами const, virtual і static.

  • Конструктори глобальних об’єктів викликаються до виклику функції main. Локальні об’єкти створюються, як тільки стає активною область їх дії. Конструктор запускається і при створенні тимчасового об'єкта (наприклад, при передачі об’єкта з функції).

  • Конструктор викликається, якщо в програмі зустрілася будь-яка із синтаксичних конструкцій:

імя_класу ім’я_об’єкту [(список параметрів)];

//Список параметрів не повинен бути порожнім

імя_класу (список параметрів);

//Створюється об'єкт без імені (список може бути //порожнім)

ім’я_класу ім’я_об’екту = вираз;

//Створюється об’єкт без імені і копіюється

Завдання для лабораторної роботи

  1. Створити клас відповідно до варіанту (див. Додаток).

При створенні класу повинен бути дотриманий принцип інкапсуляції.

  1. Створити конструктор за замовчуванням та хоча б два інших конструктори для початкової ініціалізації об’єкта.

  2. Створити функції члени згідно з варіантом.

  3. Продемонструвати можливості класу завдяки створеному віконному застосуванню.

Лабораторне завдання

Клас Complex – комплексне число. Клас повинен містити функції-члени, які реалізовують: а)Додавання б)Віднімання в)Множення г)Піднесення до n-го

степеня д)Отримання кореня n-го степеня е)Задавання значень полів є)Зчитування (отримання значень полів) ж)Представлення в тригонометричній формі з)Введення комплексного числа з форми и)Виведення комплексного числа на форму.

Код програми

#include <clx.h>

#pragma hdrstop

#include <math.h>

#include <iostream.h>

#pragma argsused

using namespace std;

class Complex {

private:

double re;

double im;

public:

Complex (void){

}

Complex (double a,double b){

re=a;

im=b;

}

~Complex(void){

}

int n;

public:

void Sum(Complex a,Complex b){//Обчислення суми комплексних чисел

re=a.re + b.re;

im=a.im + b.im;

cout<<" Suma arif.forma: "<<re<<" + "<<im<<"i"<<endl;

double f1=sqrt(re*re+im*im);

double f2=re/f1;

double f3=im/f1;

cout<<" Trigonometr.suma "<<endl;

cout<<f1<<"(cos("<<f2<<")+isin("<<f3<<"))"<<endl;

}

void Riz(Complex a,Complex b){ //Обчислення різниці комплексних чисел

re=a.re-b.re;

im=a.im-b.im;

cout<<" Riznutsa: "<<re<<" + "<<im<<"i"<<endl;

double f1=sqrt(re*re+im*im);

double f2=re/f1;

double f3=im/f1;

cout<<"Trigonometr. riznutsa"<<endl;

cout<<f1<<"(cos("<<f2<<")+isin("<<f3<<"))"<<endl;

}

Complex Dobutok(Complex a,Complex b){ //Обчислення добутку комплексних чисел

Complex x;

x.re=a.re*b.re - a.im*b.im;

x.im=a.im*b.re + a.re*b.im;

cout<<" Mnozenja: "<<x.re<<" + "<<x.im<<"i"<<endl;

double f1=sqrt(x.re*x.re+x.im*x.im);

double f2=x.re/f1;

double f3=x.im/f1;

cout<<" Trigonometr. mnozenja"<<endl;

cout<<f1<<"(cos("<<f2<<")+isin("<<f3<<"))"<<endl;

return x;

}

Complex Dil(Complex a,Complex b){// Обчислення ділення комплексних чисел

Complex x;

if(b.re*b.re+b.im*b.im == 0)

{

cout<<" Dilenja na 0 ";

}

else

{

x.re=(a.re*b.re+a.im*b.im)/(b.re*b.re+b.im*b.im);

x.im=(a.im*b.re-a.re*b.im)/(b.re*b.re+b.im*b.im);

cout<<" Dilenja: "<<x.re<<" + "<<x.im<<"i"<<endl;

double f1=sqrt(x.re*x.re+x.im*x.im);

double f2=x.re/f1;

double f3=x.im/f1;

cout<<" Trigonometr.dilenja: "<<endl;

cout<<f1<<"(cos("<<f2<<")+isin("<<f3<<"))"<<endl;

}

return x;

}

Complex Stepin(Complex a,Complex b){// Обчислення степеня комплексного числа

Complex x;

int n;

cout<<" VVedit Stepin Chysla: "<<endl;

cin>>n;

double r=sqrt(a.re*a.re+a.im*a.im);

double rn=pow(2,r);

double f2=n*a.re/rn;

double f3=n*a.im/rn;

cout<<" Trigonometr. forma vozvedenja v stepin a: "<<endl;

cout<<rn<<"(cos("<<f2<<")+isin("<<f3<<"))"<<endl;

return x;

}

Complex Korin(Complex a,Complex b){// Обчислення кореня комплексних чисел

Complex x;

int m;

int k;

cout<<" Vvedit chyslo korin stepenja: "<<endl;

cin>>m;

cout<<" Vvedit nomer korenja: "<<endl;

cin>>k;

double r=sqrt(a.re*a.re+a.im*a.im);

double rn= pow(2,r);

double f1=(m*a.re/rn+2*3,14*k)/m;

double f2=(m*a.im/rn+2*3.14*k)/m;

cout<<" Trigonometr. forma vuchuslenja korenja iz a: "<<endl;

cout<<rn<<"(cos("<<f1<<")+isin("<<f2<<"))"<<endl;

return x;

}

Complex Prusvoenja(Complex a,Complex b){//операція присвоєння, експонента комплексного числа

Complex x;

double r=sqrt(a.re*a.re+a.im*a.im);

double f2=a.re/r;

cout<<" Exponenta a: "<<endl;

cout<<r<<"e^(i*"<<f2<<")"<<endl;

return x;

}

void ShowComplex(){//вивід комплексного числа

cout<<"Vvedit Chyslo "<<endl;

cin>>re;

cin>>im;

cout<<" Arif.forma: "<<re<<" + "<<im<<"i"<<endl;

double z=sqrt(re*re+im*im);

cout<<" Modul chusla: "<<z<<endl;

cout<<" Trigonometr. forma "<<endl;

double f=re/z;

double f1=im/z;

cout<<z<<"(cos("<<f<<")+isin("<<f1<<"))"<<endl;

}

};

//---------------------------------------------------------------------------

#pragma argsused

int main(int argc, char* argv[])

{

Complex a;

Complex b;

Complex c;

a.ShowComplex();

b.ShowComplex();

c.Sum(a,b);

c.Riz(a,b);

c.Dobutok(a,b);

c.Dil(a,b);

c.Stepin(a,b);

c.Korin(a,b);

c.Prusvoenja(a,b);

//c.ShowComplex();

system("pause");

return 0;

}

//---------------------------------------------------------------------------

Результат виконання роботи

Виведення операцій над комплексними числами(рис.1).

Рис.1

Висновок

Виконавши дану лабораторну роботу, я навчився створювати класи, використовувати конструктори для ініціалізації об’єктів, опанував принципи створення функцій-членів, а також навчився використовувати різні типи доступу до полів та методів класів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]