Всім привіт Ми продовжуємо з вами розбирати перевантаження операторів і Сьогодні ми розберемо з вами перевантаження операторів індексації квадратних дожок та круглих дожок за допомогою цих операторів ми будемо отримувати доступ до елемента наших масивів одновимірного або двохвимірного Але перед тим давайте нагадаємо що таке перевантаження операторів перевантаження операторів - це реалізація функції або Відповідно ми можемо реалізовувати дружню функцію або метод класу для чого потрібно взагалі перевантажувати оператор також давайте при гадаємо що для того щоб мати можливість застосовувати наприклад арифметичні оператори оператори відношення якісь можливо інші оператори для роботи з об'єктами наших класів пам'ятаєте ми минулого разу з вами розбирали можливість перевантажувати оператори відношення Для того щоб потім в інтмені або в тому місці де ви створите об'єкти вашого класу наприклад а іб мати можливість порівняти їх для того щоб мати можливість їх порійняти ми з вами перевантажували оцей оператор більше робили це за допомогою функції функція в нас була глобальна вона отримала два об'єкта і всередині ми робили просто порівняння отримували результат порівняння True чи fse і повертали але звісно таку функцію ми робили дружньо для нашого класу для чого ми це робили для того щоб мати можливість в нашій функції звертатися до закритих полів нашого класу до закритої змінної а от що таке перевантаження операторів І от Сьогодні ми з вами попробуємо вже завершити можливість повністю реалізації перета операторів завдяки реалізації квадратних дужків і круглих дужків квадратні дужки зазвичай використовуються для доступу до елемента вони називаються індексація елемента а круглі дужки - це фактично перевантаження подібне до функцій яке я вам також далі покажу давайте поки що попробуємо застосувати перевантаження оператора індексація ролодожу уявимо собі що в нас є клас inн в класі ін в нас буде створюватись масив поляхпраivт він буде в нас реалізований масив буде статичний не динамічний а статичний змінюємо назву пишемо privт створюємо тут масив rре статичний на 10 елементів за допомогою конструктора будемо його ініціалізувати рандомними значеннями коли викликаємо конструктор конструктор нічого пропередавати не будемо але всередині конструктора наший масив буде позамовчено ініціалізований якимось значеннями наприклад In I рав0 це наш цикл для заповнення значень а I менше 10 хай буде і i п+ відкриваємо фігурні дужки пишемо аре квадратні дужки I =вно функція круглі дужки процент 10 кра от ініціалізували наш масив по замовченню рандомними значеннями також додамо давайте функцію print точніше Void Print const для виведення нашого масиву через cкleф скопіюємо наш цикл 4 відкриваємо фгурні дужки знову stdc Out виводимо весь наш масив квадратні дужки I і через пробіл виводимо крапка робимо перехід на новий рядок в кінці STD handle все от такий нашей буде відповідно початковий клас початкова його реалізація створення масиву заповнення масиву і виведення масиву переходимо до ітмену створимо об'єкт нашого класу int о1кра з комою і потім через О1 викличемо метод print зберігаємо компілюємо нашу роботум вали запускаємо виводимо наш масив Окей але якщо я хочу наприклад отримати доступ до якогось елемента наприклад до елемента номер три що ми можемо реалізувати Ну наприклад ми можемо реалізувати з вами якийсь метод або сеter або getter Зазвичай це getтери можна буде реалізовувати Зараз ми видалимо getter Get rray пам'ятаєте getетери і сетери - це методи які дають можливість звернутися до якогось елемента і ми можемо використовувати getter зараз його реалізуємо для того щоб отриб доступ до якогось елемента нашого масиву будемо вказувати порядковий номер будемо вказувати індекс реалізовуємо getter int get aray глядужки in індекс відкриваємо прні дужки R аре квадратні дужки індекс крапка скоми дивимося Get вже не підсвічується а помилками все працює коректно можна застосовувати цей елемент і повертати якесь значення з нашого масиву по його індексу компілюємо запускаємо виводимо весь масив і потім виводимо нуль ми вказали тут четвертий четвертий індекс рахуємо 0 1 2 3 4 Окей супер все працює коректно але тепер наприклад якщо я от отримав доступ і хочу змінити тепер нуль на якесь інше значення на 10 в мене є інший спосіб це можливо застосовувати ще сетер сетер для встановлення значення потрібно буде реалізувати сетер сетер нічого повертати не буде Set rray він буде приймати індекс індекс того елемента який ми хочемо змінити і intvue і value яке ми будемо класти по тому індексу пишемо rray квадратні дужки індекс val кра комою от наш сети val все не підсвічується все добре застосовуємо знову inменні setter пишемо О1 точка Set rray вказуємо індекс 4 вказуємо значення 10 крапка з комою і повторно знову виводемо через getter те значення яке ми з вами зараз змінимо компілює виводимо весь масив виводимо нуль а потім виводимо 10 все працює коректно Окей але ми можемо спростити застосування цього гетера і сетера реалізувавши індексацію реалізувавши перевантаження квадратних дужок він в нас буде працювати так як ми хотіли б щоб виконувати дію для роботи зі звичайним масивом наприклад пам'ятаєте Якщо ми будемо мати масив якийсь цілочисельний статичний масив всередині інтмену ми просто його створюємо вказуємо розмір то ми за допомогою квадратних Жок Можемо і звернутися до елемента і вивести значення по індексу якей ми вказали і звернутися по цьому індексу і змінити те значення тобто квадратні дужки в нас використовуються двічі і вони виконують а роль двох наших методів Get rray і Set rray ми за допомогою квадратних дужок можемо іїх встановити значення і можемо вивести це значення це в принципі базова річ яка застосовується для роботи нашим масивом і ми хочемо таке ж саме реалізувати для роботи з нашим об'єктом нашого класу тому ми перевантажимо з вами такий оператор індексації всередині класу як його перевантажити наший відповідно оператор буде також повертати int і буде повертати по посиланню inнt це для того щоб ми мали можливість і змінювати значення Далі пишемо ключове слово оператор оператор перевантаження квадратних дужок і круглих дужок зазвичай використовується реалізується через метод класу квадратні дужки круглі дужки і пишемо intінкс відкриваємо фігурні дужки аре квадратні дужки індекс крап Суми от В нас реалізовано тепер перевантаження квадратних дужок тепер ми можемо їх застосувати для того щоб отримати доступ до елемента і змінити його наприклад ми захотіли змінити якийсь інший елемент тут ми змінювали на 10 давайте також його продовжимо змінювати пишемо rray відкриваємо квадратні дужки казм 4 равно тепер покладемо туди 20 там не аррей а О1 змінили і тепер також виведемо десі Out пишемо О1 квадратні дужкичотири STD nl скомпілюємо повторно запускаємо виводимо масив виводимо нуль потім виводимо 10 ми змінили за допомогою сетера А за допомогою кетера вивели Ну і потім виводимо 20 і тепер ми змінили наш елемент під індексом 4 на 20 за допомогою перевантажених квадратних дужок і квадратні дужки ми використовуємо для того щоб і змінювати значення і отримувати їх точніше можливо виводити значення загалом квадратні дужки в нас виконують дію двох методів Як бачите легше реалізувати один метод перевантаження квадратних дужок чим реалізовувати гетери і се для того щоб мати можливість отримати доступ до елемента нашого масиву Оце і Вся суть полягає в роботі з масивом одновимірним який знаходиться все середині класу і з реалізацією перевантаження квадратних дужок перейдемо тепер до останнього це перевантаження круглидужок Для чого потрібно нам перевантажувати круглі дужки тут уже клас реалізований розкоментуємо int M в нашому класі Тепер уже інший масив в попередньому нашому класі був одновимірний масив тут в нас буде двохвимірний масив Чому так Тому що круглі дужки зазвичай перевантажуються для того щоб отримати доступ до елемента двохвимірного масиву от перевантажений цей метод оператор пишемо крулі дужки потім відкриваємо круглі дужки і пишемо значення точніше індексиро і coл тому що на жаль ми не можемо пере вантажити з вами подвійні квадратні дужки квадратні дужки квадратні дужки Так перевантажувати не можна можемо перевантажити тільки одні квадратні дужки відповідно за допомогою одних квадратних дужок ми можемо отримати доступ до елемента одновимірного масиву але коли ми присимо з двохвимірним масивом в нас присутня подвійна індексація і нам потрібно вказувати два індекси два індекси в квадратних дужках і тому вирішення такої проблем буде в нас за допомогою от перевантаження круглих дужок круглі дужки в нас будуть відповідно викликатися при за допомогою нашого об'єкта і ми будемо передавати в круглих дошках два індекса перший індекс - це порядковий номер рядка другий індекс - це порядковий номер стовпчика клас тут в нас уже реалізований він заповнюється також рандомними значеннями єсть перевантаження крулидужок ну крім того в нас тут ще перевантаження виведення нагадаю що ми можемо з вами також перевантажувати виведення це оператор C Out перевантажити він через ружню функцію Він отримує об'єкт C Out і отримує об'єкт вашого класу і всередині нього Ми от реалізуємо виведення Ну те виведення яке б ми реалізовували наприклад в методі print всередині класу також подвіідний циклф тому що ми працюємо з нашим двохвимірним масивом ну і тут банальне виведення тільки ми замість аута використовуємо Out записуємо всю інформацію в Out і потім Out повертаємо Для зручності Це зроблено для зручності Тепер давайте застосуємо А і скомпілюємо роботу Де ми використовуємо ці круглі дужки подивимося в inman створюємо ми об'єкт класу оператор далі виводимо цей об'єкт далі ми отримаємо доступ до елемента двохвимірного масиву по індексу 3,3 кладемо туди значення пять і знову виводимо масив компілюємо запускаємо вивели масив наший звертаємося до елемента під індексом 3 і 3 0 1 2 3 0 1 2 3 на перетині ставимо п'ятірку тут в нас раніше була нуль значення тепер значення в нас п'ятірка от для чого потрібні нам відповідно реалізація круглих дужок тому що вони от допомагають нам отримати доступ до елемента двохвимірного масиву але це не все зазвичай круглі дужки використовують для доступу до двохвимірного масиву Та вони мають певну унікальність яку певну унікальність унікальність полягає в тому що ми можемо вказувати будь-яку кількість аргументів які можуть приймати ці кругли дужки чому так чому інші не можуть тому що коли ми перевантажимо наприклад тільки квадратні душки Ми там вказуємо тільки два один аргумент інt індекс вказати два аргументи буде помилка вказати нуль аргументів також буде помилка Там завжди треба вказувати тільки один аргумент так само Коли ми перевантажимо з вами якийсь інший оператор наприклад додавання через дружню функцію в нас також там тільки два аргументи оперант який знаходиться праворуч і оперант який знаходиться ліворуч Якщо зараз прогорнути вище ми подивимося як вони перевантажть от перший в нас буде оперант і другий тобто два аргумента завжди або може бути один якщо ми через метод класу один або два не більше три не може бути це точно чотири також не може бути тому що тоді правильно працювати не може Але якщо ми будемо використовувати і перевантажувати круглі дужки то їхня унікальність полягає в тому що ми можемо вказати будь-яку кількість аргументів 1 2 3 Ну Скільки вам потрібно скільки ви може можете вказувати для основної задачі ми вказуємо два аргументи серед того щоб отримати доступ до елемента двохвимірного масиву але ми можемо також вказати нуль аргументів наприклад от нуль аргументів оператор круглі дужки знов круглі дужки І тепер в цих круглодужках ми ніяку кількість аргументів не вказуємо чим займається таке перевантаження операторів коли ми будемо його викликати якщо ми просто напишемо а круглі дужки відповідно викличеться цей метод який нічого не приймає він займається тільки банальною справою ви можете Тут взагалі що завгодно можете написати Я тут написав що ми онуляємо всі елементи нашого масиву присвоїмо точніше всім елементам нашого масиву значення нуль і коли ми знову От застосуємо тепер круглі дужки без аргументів в нас з вами викличеться якраз той метод який буде онулювати всі наші значення Тобто замінювати всі значення на нуль Як бачите ми можемо тепер їх використовувати оці круглі дужки для такої роботи не вказувати ніяку кількість аргументів або наприклад якщо хочемо то можемо вказати тільки один аргумент от знов перевантаження круглих дужок vo оператор круглі дужки і ці круглі дужки в нас отримують тільки один аргумент invue що робить відповідно цей метод він також працює з двохвимірним масивом і Кожен елемент змінює на значення val тепер ми маємо можливість наприклад через об'єкт відкрити круглі дужки покласти туди якесь значення 10 і Кожен елемент нашого масиву буде змінений на значення 10 компілюємо запускаємо спочатку нуль і потім змінилися всі на 10 ви можете створити і перевантаження круглих дужок додавши ще і третій аргумент тобто 1 2 3 будь-яку кількість аргументів можна додавати це така унікальність перевантаження круглих дужок що в неї може бути будь-яка кількість аргументів і ми можемо передавати туди будь-яку кількість аргументів і так на цьому всепере женими операторами ми майже завершили Наступного разу ми розберемо перевантаження оператора присвоювання і конструктор переміщення до наступної зустрічі і бажаю вам успіху