КЛАСИ ТА ОБ'ЄКТИ
Завантажити презентаціюПрезентація по слайдам:
Лекція 5. КЛАСИ ТА ОБ'ЄКТИ Зрозуміти - означає звикнути і навчитись користуватись Річард Фейнман
Програма Два підходи щодо програмування Структурне програмування Об'єктно-орієнтоване програмування - ООП Данні Функції/процедури для обробки данних Програма Об'єкт: данні+функції для обробки данних Об'єкт: данні+функції для обробки данних Об'єкт: данні+функції для обробки данних
Коротка історія та причини переходу до ООП в С++ В 1972 році Деніс Рітчі запропонував мову програмування, ствоерну спеціально для програмістів: це мова С В 1979 році Б’єрн Страуструп для вирішення проблеми удосконалення програмних кодів шляхом переходу на ООП запропонував мову С with classes Остаточна версія - мова С++ (з 1983 року)
ВСІ ООП-мови базуються на трьох механізмах 1. Інкапсуляція: механізм, який пов’язує та об’єднує в одне ціле код та дані. Для цього створюється об’єкт – конструкція, що підтримує інкапсуляцію. Базова одиниця інкапсуляції – клас. Клас містить дані та код для їх обробки. Об’єкт є екземпляром класа. 2. Поліморфізм: механізм, що дозволяє використовувати один інтерфейс для різних дій. Дозволяє понизити рівень складності програм. 3. Наслідування: Механізм, завдяки якому один об’єкт може отримувати властивості іншого об ’єкта. При цьому поліморфізм дозволяє змінювати поведінку дочірніх (похідних) класів
Базові принципи ООП Інкапсуляція Поліморфізм Наслідування Програмний код + дані Єдиний інтерфейс Передача властивостей
Основні терміни Клас – базова одиниця інкапсуляції. Клас поєднує в собі дані (поля) та програмний код (методи) для їх обробки. Клас є шаблоном, за яким створюються об'єкти Поле класу – змінна, описана в класі Метод класу – функція, описана в класі Члени класу - поля та методи класу Члени класу можуть бути відкритими та закритими (за умовчанням) Об'єкт – конкретний екземпляр класу
Структурне програмування vs. ООП Програма - це будинок Будуємо з цеглин Будуємо з блоків Блоки = Об'єкти Тип блоку = Клас Добре для малих будинків, і не дуже добре для великих Добре для великих будинків, і не дуже добре для малих
Оголошення класу class ім’я_класу{ //закриті поля та методи public: //відкриті поля та методи }список_об'єктів; Використовується "точковий синтаксис": ім'я_об'єкту.член_класу методи вказуються з круглими дужками Звернення до членів класу
Приклад 5.1. Створення і використання класу #include using namespace std; // Оголошення класу SimpleClass: class SimpleClass{ public: // Цілочисельне поле: int number; }; int main(){ // Створення об'єкту MyObj класу SimpleClass: SimpleClass MyObj; // Полю об'єкта присвоюється значення: MyObj.number=5; cout
Приклад 5.2. Декілька об'єктів #include using namespace std; class SimpleClass{ public: int number;}MyObj1, MyObj2; int main(){ MyObj1.number=5; MyObj2.number=++MyObj1.number; cout
Приклад 5.3. Декілька об'єктів class SimpleClass{ public: int m, n; int summa(){ int k=n+m; return k;} void show(){ cout
Приклад 5.3. Декілька об'єктів (продовження) int main(){ SimpleClass MyObj1,MyObj2; MyObj1.m=1; MyObj1.n=2; MyObj2.m=8; MyObj2.n=9; cout
Приклад 5.4. Закриті і відкриті члени класу class SimpleClass{ //Закриті члени класу: int m; int n; public: //Відкриті члени класу: void show(); void setnm(int i,int j); };
Приклад 5.4. Закриті і відкриті члени класу (продовження) int main(){ SimpleClass obj; obj.setnm(1,2); obj.show(); return 0;} //Опис методів класу: void SimpleClass::show(){ cout
Статичні поля класу Статичне поле класу - поле, спільне для всіх об'єктів цього класу. Оголошується за допомогою ключового слова static. Приклад 5.5. Статичні поля класу class SimpleClass{ public: static int m; int n; void show();}obj1,obj2; //Повторне оголошення статичного поля: int SimpleClass::m;
Приклад 5.5. Статичні поля класу (продовження) int main(){ SimpleClass::m=10; obj1.n=1; obj2.n=2; obj1.show(); obj2.show(); obj1.m=100; obj2.show(); return 0;} void SimpleClass::show(){ cout
Перевантаження методів Як і звичайні функції, методи класів можна перевантажувати. Перевантаження методу - створення декількох версій методу з одною і тою самою назвою, але різними прототипами Приклад 5.6. Перевантаження методу class MyClass{ int a,b; public: void setab(int i,int j){ a=i; b=j;} void setab(int i){ a=i; b=i;} void getab(){ cout
Передача об'єктів аргументами функцій При передачі об'єкту аргументом функції в якості імені аргументу вказується ім'я відповідного класу Приклад 5.7. Аргумент функції - об'єкт class ClassA{ public: double x,y; }objA; class ClassB{ public: int a,b; double f(ClassA obj){ return a*obj.x+b*obj.y;} }objB; void showB(ClassB obj){ cout
Результат функції - об'єкт Якщо функція в якості результату повертає об'єкт, ідентифікатором типу результату вказують ім'я відповідного класу Приклад 5.8. Результат функції - об'єкт class ClassA{ public: double x; double y; }objA; class ClassB{ public: int a,b; }objB;
Приклад 5.8. Результат функції - об'єкт (продовження) ClassA sumAB(ClassA obj1,ClassB obj2){ ClassA tmp; tmp.x=obj1.x+obj2.a; tmp.y=obj1.y+obj2.b; return tmp;} int main(){ ClassA obj; objA.x=2.5; objA.y=3.6; objB.a=2; objB.b=5; obj=sumAB(objA,objB); cout
Вказівники на об'єкти Змінна-вказівник може посилатись на об'єкт. Оператор -> використовують для посилання на член класу. Ключове слово this є вказівником на об'єкт, з якого викликається метод Приклад 5.9. Вказівники на об'єкти class MyClass{ public: int n; void show(){cout
Приклад 5.10. Використання вказівника this class MyClass{ public: int n,m; void show(){cout
Масиви об'єктів При створенні масиву об'єктів в якості типу елементів вказують ім'я відповідного класу Приклад 5.11. Масиви об'єктів class MyClass{ public: double x; void show(){cout
Дружні функції В загальному випадку зовнішня до класу функція доступу до закритих членів класу не має. Щоб функція мала доступ до закритих членів, її необхідно оголосити як дружню до класу. Для цього прототип функції, разом з ключовим словом friend вказується при описі класу Приклад 5.12. Дружні функції class MyClass{ double x; public: MyClass(double z){x=z;} //Дружня функція: friend void show(MyClass obj); }; void show(MyClass obj){cout
Приклад 5.13. Дружні функції - 2 class B; class A{ double x; public: A(double z){x=z;} friend double summa(A a,B b); }a(3.5); class B{ double y; public: B(double z){y=z;} friend double summa(A a,B b); }b(2.3); double summa(A a,B b){ return a.x+b.y;} int main(){cout
Конструктори і деструктори Конструктор - метод, що викликається автоматично при створенні об'єкту Деструктор - метод, що викликається автоматично при видаленні об'єкту з пам'яті Правила оголошення конструктора 1. Ім'я конструктора співпадає з назвою класу 2. Конструктор не повертає аргумент і для нього не вказується ідентифікатор типу результату 3. Конструктор може мати аргументи і його можна перевантажувати Правила оголошення деструктора 1. Ім'я деструктора починається з символу ~ (тильда) і співпадає з назвою класу 2. Деструктор не повертає аргумент і для нього не вказується ідентифікатор типу результату 3. Деструктор не має аргументів і його не можна перевантажувати
Приклад 5.14. Оголошення конструктора class MyClass{ public: int m,n; //Конструктор класу: MyClass(){ m=0; n=0;} void show(){ cout
Приклад 5.15. Конструктор з аргументами class MyClass{ public: int m,n; //Конструктор класу з аргументами: MyClass(int a,int b){ m=a; n=b;} void show(){ cout
Приклад 5.16. Перевантаження конструктора class MyClass{ public: int m,n; MyClass(){m=0; n=0;} MyClass(int a){m=a; n=a;} MyClass(int a,int b){m=a; n=b;} void show(){ cout
Приклад 5.17. Використання деструктора class MyClass{ public: int m,n; //Конструктор класу: MyClass(){ m=0; n=0; cout
Резюме 1. Клас є базовою одиницею інкапсуляції, містить поля (дані) та методи (код для обробки даних). Екземпляром класу є об'єкт. 2. Поля і методи класу можуть бути закритими і відкритими. 3. Статичне поле - це поле, спільне для всіх об'єктів даного класу. 4. Щоб зовнішня функція мала доступ до закритих полів, її необхідно оголосити як дружню. 5. Об'єкти можна передавати аргументами функцій, повертати в якості результату, створювати масиви об'єктів, створювати вказівники на об'єкти. 6. Методи класів можна перевантажувати. 7. Конструктор - метод, що запускається при створенні об'єкту. Конструктор можна перевантажувати. 8. Деструктор - метод, що запускається при знищенні об'єкту. Деструктор не можна перевантажувати.
Схожі презентації
Категорії