Алгебра логіки як розділ математики

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

орені розробниками. Починаючи з найпростіших класів, можна створювати похідні класи по зростаючій складності, що не тільки легкі в налагодженні, але і прості за внутрішньою структурою.

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

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

Крім того, похідний клас може перевантажувати (overload) наслідувані методи в тому випадку, коли їхня робота в базовому класі не пасує нащадкові. Використання перевантаження в ООП усіляко заохочується, хоча в прямому розумінні значення цього слова перевантажень звичайно уникають. Говорять, що метод перевантажений, якщо він асоціюється з більш ніж одною однойменною функцією.

Поліморфізм - це властивість родинних обєктів (тобто обєктів, класи яких є похідними від одного „батька”) поводитися по-різному в залежності від ситуації, що виникає в момент виконання програми. У рамках ООП програміст може впливати на поведінку обєкта тільки побічно, змінюючи вхідні в нього методи і додаючи „нащадкам" відсутні в „батька" специфічні властивості.

Для зміни методу необхідно перевантажити його в „нащадку”, тобто оголосити в „нащадку” однойменний метод і реалізувати в ньому потрібні дії. У результаті в обєкті-батьку й обєкті-нащадку будуть діяти два однойменних методи, що мають різну кодову реалізацію і, отже, що додають обєктам різне поведінку. Наприклад, в ієрархії родинних класів геометричних фігур (точка, пряма лінія, квадрат, прямокутник, окружність, еліпс і т.д.) кожен клас має метод Draw, що відповідає за належний відгук на подію з вимогою намалювати цю фігуру.

Завдяки поліморфізмові, „нащадки” можуть перевантажувати загальні методи "батька" для того, щоб реагувати специфічним образом на ту саму подію.

Класи в C++

Перед тим як працювати з класом, програма повинна його оголосити. Розглянемо синтаксис оголошення класу на прикладі класу circle:

class Circle {

public:

Circle ();

void SetRadius (void);

void GetRadius (void);

~Circle ();

private:

void CalculateArea (void);

int radius;

int color;

};

Ключове слово class показує компілятору, що все, що знаходиться у фігурних дужках ({}) належить оголошенню класу. (Не забувайте ставити крапку з комою наприкінці оголошення.) Оголошення класу містить оголошення елементів даних (наприклад, int radius) і прототипи функцій-елементів класу. В оголошенні класу circle містяться наступні елементи даних:

int radius;

int color;

Оголошення також містить пять прототипів функцій-елементів:

Circle (); // конструктор

void SetRadius (void);

void GetRadius (void);

~Circle (); // деструктор

void CalculateArea (void);

Прототипи функцій і оголошення елементів даних включаються в оголошенні класу в розділи public (відкритий) або private (закритий). Ключові слова public і private говорять компілятору про приступність елементів-функцій і даних. Наприклад, функція SetRadius () визначена в розділі public, і це означає, що будь-яка функція програми може викликати функцію SetRadius (). Функція CalculateArea () визначена в розділі private, і цю функцію можна викликати тільки в коді функцій-елементів класу Circle.

Аналогічно, оскільки елемент даних radius оголошений у розділі private, прямий доступ до нього (для установки або читання його значення) можливий тільки в коді функцій-елементів класу Circle. Якби ви оголосили елемент даних radius у розділі public, то будь-яка функція програми мала би доступ (для читання і присвоювання) до елемента даних radius.

Приклад: Заповнення і вивід платіжної відомості

include

#include

using namespace std;

class employee {

char name [80]; // private by default

public:

void putname (char *n); // these are public

void getname (char *n);

private:

double wage; // now, private again

public:

void putwage (double w); // back to public

double getwage ();

};

void employee:: putname (char *n)

{

strcpy (name, n);

}

void employee:: getname (char *n)

{

strcpy (n, name);

}

void employee:: putwage (double w)

{

wage = w;

}

double employee:: getwage ()

{

return wage;

}

int main ()

{

employee ted;

char name [80];

ted. putname ("Ted Jones");

ted. putwage (75000);

ted. getname (name);

cout << name << " makes $";

cout << ted. getwage () << " per year. ";

return 0;

}

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

Створити клас трикутників, змінними якого є сторони трикутника, а методами-обчислення його площі і периметра. Створити два обєкти, що належать до створеного класу, і для одного обчислити площу, а для другого - периметр.