МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Лекція 16Властивості об'єкта Псевдополя , доступні для читання і / або запису. Властивості зовні виглядають як поля і використовуються аналогічно доступним полях ( з деякими винятками) , однак фактично при зверненні до них відбувається виклик методів доступу . Таким чином , властивості можна розглядати як «розумні» поля даних , що супроводжують доступ до внутрішніх даних об'єкта -якими додатковими діями ( наприклад , коли зміна координати об'єкта супроводжується його перемальовуванням на новому місці). Властивості , по суті - не більше ніж синтаксичний цукор , оскільки ніяких нових можливостей вони не додають , а лише приховують виклик методів доступу . Конкретна мовна реалізація властивостей може бути різною. Наприклад , в C # оголошення властивості безпосередньо містить код методів доступу , який викликається тільки при роботі з властивостями , тобто не вимагає окремих методів доступу , доступних для безпосереднього виклику . У Delphi оголошення властивості містить лише імена методів доступу , які повинні викликатися при зверненні до поля. Самі методи доступу є звичайні методи з деякими додатковими вимогами до сигнатурі . Поліморфізм реалізується шляхом введення в мову правил , згідно з якими змінної типу «клас » може бути присвоєний об'єкт будь-якого класу - нащадка її
Тема : Створення базових класів, об’єкти. Конструктори та деструктори, this. Статичні та константні поля. Мета: Вивчити поняття конструктора та деструктора, типи конструкторів, перевантаження конструкторі. Розібрати синтаксис та обмеження роботи з конструкторами та деструкторами. В об'єктно - орієнтованому програмуванні конструктор класу (від англ. Constructor, іноді скорочують ctor ) - спеціальний блок інструкцій , що викликається при створенні об'єкта. Конструктор схожий з методом , але відрізняється від методу тим , що не має явним чином певного типу повертаються даних , не успадковується , і зазвичай має різні правила для розглянутих модифікаторів. Конструктори часто виділяються наявністю однакового імені з ім'ям класу , в якому оголошується . Їх завдання - ініціалізувати члени об'єкта і визначити інваріант класу , повідомивши у разі некоректності інваріанта . Коректно написаний конструктор залишить об'єкт в « правильному » стані. Незмінні об'єкти теж повинні бути проініціалізовані конструктором. Термін « конструктор » також використовується для позначення одного з тегів , що описують дані в алгебраїчному типі даних. Це використання дещо відрізняється від описуваного в статті. Для додаткової інформації дивіться Алгебраїчний тип даних. У більшості мов конструктор може бути перевантажений , що дозволяє використовувати декілька конструкторів в одному класі , причому кожен конструктор може мати різні параметри .
призначення конструктора Одна з ключових особливостей ООП - інкапсуляція : внутрішні поля об'єкта безпосередньо недоступні , і користувач може працювати з об'єктом тільки як з єдиним цілим , через відкриті ( public ) методи. Кожен метод , в ідеалі , має бути влаштований так , щоб об'єкт, що знаходиться в « допустимому » стані (тобто коли виконується інваріант класу) , після виклику методу також опинився в допустимому стані. І перше завдання конструктора - перевести поля об'єкта в такий стан. Друге завдання - спростити користування об'єктом . Об'єкт - не «річ у собі» , йому часто доводиться вимагати якусь інформацію від інших об'єктів : наприклад , об'єкт File , створюючись , повинен отримати ім'я файлу. Це можна зробити і через метод: File file ; file.open ( " in.txt " , File :: omRead ) ; Але зручніше відкриття файлу зробити в конструкторі : [ 1 ] File file ( " in.txt " , File :: omRead ) ; види конструкторів Деякі мови програмування розрізняють кілька особливих типів конструкторів : • конструктор за замовчуванням - конструктор , що не приймає аргументів ; • конструктор копіювання - конструктор , що приймає як аргумент об'єкт того ж класу ( або посилання з нього) ; • конструктор перетворення - конструктор , що приймає один аргумент (ці конструктори можуть викликатися автоматично для перетворення значень інших типів в об'єкти даного класу). class Complex { / / Конструктор за замовчуванням
Основна стаття : Конструктор за замовчуванням Конструктор не має обов'язкових аргументів. Використовується при створенні масивів об'єктів , викликаючи для створення кожного екземпляра. У відсутність явно заданого конструктора за замовчуванням його код генерується компілятором ( що на початковому тексті , природно, не відбивається) . конструктор копіювання Основна стаття : Конструктор копіювання Конструктор , аргументом якого є посилання на об'єкт того ж класу. Застосовується в C + + для передачі об'єктів у функції за значенням . Конструктор копіювання в основному необхідний, коли об'єкт має покажчики на об'єкти , виділені в купі . Якщо програміст не створює конструктор копіювання , то компілятор створить неявний конструктор копіювання , який копіює покажчики як є , тобто фактичне копіювання даних не відбувається і два об'єкти посилаються на одні й ті ж дані в купі . Відповідно спроба зміни « копії » зашкодить оригінал, а виклик деструктора для одного з цих об'єктів при подальшому використанні іншого призведе до обігу в область пам'яті , вже не належить програмі . Аргумент повинен передаватися саме за посиланням , а не за значенням . Це випливає з колізії : при передачі об'єкта за значенням (зокрема , для виклику конструктора ) потрібно скопіювати об'єкт. Але для того , щоб скопіювати об'єкт , необхідно викликати конструктор копіювання. конструктор перетворення Конструктор , що приймає один аргумент. Задає перетворення типу свого аргументу в тип конструктора . Таке перетворення типу неявно застосовується тільки якщо воно унікальне . Віртуальний конструктор Конструктор не буває віртуальним в сенсі віртуального методу - для того , щоб механізм віртуальних методів працював , потрібно запустити конструктор , який автоматично налаштує таблицю віртуальних методів даного об'єкта. • на всьому шляху наслідування від базового класу до створюваного ланцюжок перевизначення не обривати . При перевизначенні віртуального методу синтаксис Delphi вимагає ключове слово overload , щоб стара і нова функції з різними сигнатурами могли співіснувати , override для перевизначення функції або reintroduce для завдання нової функції з тим же ім'ям - останнє неприпустимо. type constructor Create ; virtual ; є некоректним - директива reintroduce розірвала ланцюжок перевизначення віртуального методу , і насправді буде викликаний конструктор TMotorcycle.Create (а значить , буде створений мотоцикл , а не мопед !) Див також Фабрика ( шаблон проектування ) Синтаксис С + + Ім'я конструктора має збігатися з ім'ям класу. Допускається використовувати кілька конструкторів з однаковим ім'ям , але різними параметрами. приклад Статічні члени класів • Статічні дані -члени (поля) класів Використовують для Збереження Даних, спільніх для всіх екземплярів класу , Наприклад , кількість екземплярів класу , вказівнік на вершину дінамічного списку , Деяк глобальну для Всього класу константу , тощо . Статичний член класу має буті продекларованім у класі з помощью службового слова static , а процес віділення под нього пам'яті та йо ініціалізація відбувається поза класом . • звертання до статичних членів можливе через имя класу або через ідентифікатор екземпляр (В С # - Тільки через имя класу ) . • На статічні члени розповсюджуються звічайні правила доступу . • Слід зауважіті , что в класі присутности позбав декларація статичного члену , для его создания звітність, віділіті пам'ять под нього та в разі необхідності проініціалізуваті - це відбувається поза межами класу , даже ЯКЩО статичність член задекларованого як закритий . Більше того , ЯКЩО статичність член класу ( скалярного типу ) поміченій СЛУЖБОВЕ словом const , то ВІН может буті проініціалізованій в класі , альо пам'ять под нього Все рівно має буті віділена поза класом ! • Операція sizeof НЕ враховує пам'ять , віділену под статічні поля. • Приклад . • class Example
Статічні Функції -члени класів Використовують Тільки для звертання до статичних Даних -членів и НЕ могут використовуват звічайні дані та методи класу , Адже я смороду НЕ прив'язані до екземпляр , їм НЕ передається вказівнік this . • Статічні Функції -члени класів Використовують Тільки для звертання до статичних Даних -членів и НЕ могут використовуват звічайні дані та методи класу , Аджея смороду НЕ прив'язані до екземпляр , їм НЕ передається вказівнік this . • Службове слово static вказується позбав у декларації статічної Функції , при ее візначенні воно НЕ повторюється . • звертання до статичних методів так само может відбуватісь и через имя класу , и через ідентифікатор екземпляр . • Слід зауважіті , что звічайні Функції -члени класу мают право працювати Із статичності членами класу . • Конструктор та деструктор НЕ могут буті статичність !
Читайте також:
|
||||||||
|