Лабораторна робота №9 (4 год) Робота з класами
Мета роботи: Вивчити реалізацію основних принципів об’єктно-орієнтованого програмування на мові C++.
Теоретичні відомості
1. Термінологія Об’єктно-Орієнтованого програмування.
Клас являє собою деяке розширення типу struct. Клас має дані (змінні) і дії над ними (методи). Дані і методи класу також називають членами класу.
Об’єктом називається екземпляр деякого класу. Базовим класом називається клас, від якого може породжуватись інший якийсь (породжений) клас. При цьому породжений клас наслідує структуру даних і методів свого базового класу. Породжений клас при цьому може перевизначати і розширювати методи базового класу, а також добавляти свої дані — члени класу.
Наслідування дозволяє визначати нові класи в термінах існуючих.
Поліморфізм – здатність різних об’єктів по-різному обробляти однакові повідомлення.
Інкапсуляція дозволяє говорити в термінах об’єктів і класів, приховуючи їхні дані і методи.
2. Опис класу
Оголошення нового класу виконується таким чином:
class classname : baseclassname_list
// baseclassname_list – список базових класів розділених комами:
// public ClassA, private ClassX, public ClassB
// тут зразу можна вказувати модифікатори доступу
{
type_1 var_1; // дані(змінні)
type_2 var_2;
...
type_n var_n;
public:
metod_1(); // методи
...
protected:
metod_i();
...
private:
...
}
public (відкриті), protected (захищені), private (закриті) — модифікатори доступу до членів класу.
Всі члени класу — дані і члени — за замовчуванням є закритими. До закритих членів можна отримати доступ тільки за допомогою методів самого класу. Відкриті члени доступні для всіх інших функцій програми. Але закриті члени ми не зможемо наслідувати в інших класах, а захищені зможемо.
Примітка: краще коли змінні-члени класу залишаються закритими. Завдяки цьому досягається інкапсуляція даних всередині класу. Доступ слід відкривати тільки до функцій-членів класу, які роблять доступ до його закритих даних (такі функції ще називають методами доступу).
3. Створення об’єкта
При створенні класу пам’ять не резервується, а тільки повідомляє компілятору про існування класу, про те які дані він містить, а також про те що він вміє робити. Крім цього, повідомляє компілятору про розмір класу, тобто той розмір який потрібен бути зарезервований для створення екземпляру об'єкту. Методи не потребують виділення пам’яті в об'єкті.
Об'єкт нового типу визначається таким же чином, як і будь яка інша цілочисельна змінна:
class people //створення класу
{
unsigned int Age;
string Name;
void GetAge();
};
unsigned int ABC; // звичайна змінна
people Men; // об'єкт класу створеного вище
Щоб отримати доступ до членів класу можем використати оператор прямого доступу (.):
Men.Age=47;
Аналогічно, для виклику метода GetAge() достатньо виконати наступну стрічку:
Men.GetAge();
4. Реалізація методів класу
Ми вже описали клас, створили об’єкт, тепер нам потрібно написати (визначити, реалізувати) методи:
#include <iostream.h>
// оголошення класу
class people //створення класу
{
public:
int GetAge(); // відкритий метод доступу до закритої-змінної
void SetAge(int e_age); // ще один метод
private:
int Age; // закрита змінна віку
};
// оголошення відкритого методу, який повертає значення закритої змінної про вік.
int people::GetAge()
{
return Age;
}
// оголошення відкритого методу, який встановлює значення закритої змінної про вік.
void people::SetAge(int e_age)
{
Age=e_age;
}
// основна частина програми, в якій ми присвоюємо значення закритій змінній, а потім
// зчитуємо його.
int main()
{
people Men;
Men.SetAge(38);
cout << “Людині” << Men.GetAge() << “ років\n”;
return 0;
}