Const Distance football(300,0);
//football.getdist();
cout <<"Довжина поля=";
football.showdist();
cout <<endl;
bioskey(0);
return 0;
}
Програма 11.10
Об’єкт football оголошений як константний, тому для нього можна викликати тільки константні методи, наприклад, showdist(). Виклики неконстантних методів, таких як getdist(), є некоректними.
При створенні класу хороший стиль програмування вимагає оголошення як константних функцій, що не міняють поля об’єктів класу. Це дозволяє тому, хто використовує даний клас, створювати константні об’єкти класу. З цих об’єктів можуть викликатися тільки константні функції.
Підсумок
Клас являє собою образ, що визначає структуру своїх об’єктів. Об’єкти включають в себе як дані, так і функції, призначені для їх обробки. І дані, і функції можуть бути визначені як закриті, що означає їх доступність тільки для членів даного класу; та як відкриті, тобто доступні для будь-якої функції програми. Закритість членів класу задається ключовим словом private, а відкритість – ключовим словом public.
Методом класу називається функція, що є членом цього класу. Методи класу, на відміну від інших функцій, мають доступ до закритих членів класу.
Конструктор – це метод класу, ім’я якого співпадає з іменем класу і який виконується кожен раз при створенні нового об’єкту. Конструктор не має типу повернутого значення, однак може приймати аргументи. Часто конструктор використовується для ініціалізації створюваних об’єктів класу. Конструктори допускають перезавантаження, тому можлива ініціалізація об’єкту кількома способами.
Деструктор – це метод класу, іменем якого є ім’я класу, перед яким проставлений знак ~. Виклик деструкторів відбувається при знищенні об’єкту. Деструктор не має ні аргументів, ні значення, яке повертається.
В пам’яті комп’ютера кожен об’єкт має свої власні ділянки, що зберігають значення полів цього об’єкту, але методи класу зберігаються в пам’яті в єдиному екземплярі. Поле класу теж можна зробити єдиним для всіх об’єктів даного класу, описавши його при визначенні класу з ключовим словом static. Як методи класу, так і його об’єкти можна оголошувати константними.
Питання по темі
1. У визначенні класу члени класу з ключовим словом private доступні:
а) для будь-якої функції програми
б) для користувачів, які знають пароль
в) методам класу
г) тільки відкритим членам класу
2. Операція крапки (операція доступу до члена класу об’єднує такі два елементи (зліва направо):
а) член класу і об’єкт класу
б) об’єкт класу і клас
в) клас і член цього класу
г) об’єкт класу і член цього класу
3. Посилання повідомлення об’єкту еквівалентне
а) виклику методу цього об’єкта
б) створенню об’єкта
в) видаленню об’єкта
4. Конструктор викликається автоматично в момент _______ об’єкта
а) звертання до об’єкта
б) створення об’єкта
в) видалення об’єкта
г) копіювання об’єкта
5. Ім’я конструктора у С++
а) Init
б) Done
в) Create
г) співпадає з іменем класу
6. Чи правильне твердження: один клас може мати кілька конструкторів?
а) так
б) ні
в) тільки клас, що не містить константних методів
7. Де, як правило, в конструкторі записується ініціалізація полів об’єкта?
а) між прототипом методу і тілом функції
б) в тілі функції
в) після тіла функції
8. Вираз Cl cl2=cl1; де Cl – ідентифікатор об’єктного типу, є:
а) оператором присвоювання
б) викликом конструктора копіювання за замовчуванням
в) викликом одного з методів класу
9. Деструктори:
а) не мають аргументів і не повертають жодного значення
б) не мають аргументу, але повертають значення у викликаючу програму
в) можуть мати аргументи і не повертають значення у викликаючу програму
10. Методу класу доступні дані:
а) об’єкта, членом якого він є
б) класу, членом якого він є
в) будь-якого об’єкту класу, членом якого він є
д) класу, оголошеного відкритим
11. Операція глобального дозволу позначається символом:
а) ::
б) :
в) _
12. Нехай оголошені три об’єкти класу. Скільки копій полів класу міститься в пам’яті? Скільки копій методів функції?
а) три копії полів і три копії методів
б) три копії полів і одна копія методів
в) одна копія полів і одна копія методів
13. Роздільне оголошення і визначення полів класу здійснюється для:
а) закритих полів
б) відкритих полів
в) статичних полів
14. Константний метод, викликаний для об’єкту класу:
а) може змінювати як константні, так і неконстантні поля
б) може змінювати тільки неконстантні поля
в) може змінювати тільки константні поля
г) не може змінювати ні константні, ні некостантні поля
15. Чи істинне твердження: об’єкт, оголошений як константний, можна використовувати тільки за допомогою константних методів?
Лекції 14-16
Тема 5 –Перезавантаження операцій в С++
Вступ
Перезавантаження унарних операцій
Ключове слово operator
Аргументи операції
Значення, що повертаються операцією
Тимчасові безіменні об’єкти
Постфіксні операції
Перезавантаження бінарних операцій
Арифметичні операції
Об’єднання рядків
Множинне перезавантаження
Операції порівняння
Операції арифметичного присвоювання
Операція індексації масиву
Перетворення типів
Перетворення основних типів у основні типи
Перетворення об’єктів у основні типи і навпаки
Перетворення рядків в об’єкти класу String і навпаки
Перетворення об’єктів класів в об’єктів інших класів
Деякі рекомендації щодо перезавантаження операцій і перетворення типів
Коли які перетворення використовувати?
«Підводні камені» перезавантаження операцій і перетворення типів
Підсумок
Питання по темі
Вступ
Перезавантаження операцій в - одна з найпривабливіших можливостей ООП, Воно може перетворити складний і малозрозумілий лістінг в інтуїтивно зрозумілий. Наприклад, рядки:
d3.addobjects(d1,d2);
або
d3=d1.addobjects(d2)
можна замінити на більш читабельний вираз
d3=d1+d2;
Термін «перезавантаження операцій» дається звичайним операціям С++, таким як +, -, *, >= чи += у випадку їх використання з визначеними користувачем типами даних.
Звичайно оператори виду
a=b+c;
працюють лише з основними типами даних, такими як int чи float, і спроби використання звичайних операторів, коли операнди є об’єктами визначеного користувачем класу, викличуть протест компілятора. Однак, використовуючи перезавантаження, ми можемо зробити подібні записи правильними.
Насправді перезавантаження операцій дає нам змогу перевизначати клас С++. Використовуючи класи для створення нових видів змінних і перезавантаження для визначення нових операцій, ви можете, розширивши С++, створити нову, свою власну мову.
Інший вид дій, перетворення типів, тісно зв’язаний з перезавантаженням операцій. С++ здійснює перетворення простих типів, таких як int чи float, автоматично, але перетворення, що включає в себе створені користувачем типи, вимагає виконання певної роботи програмістом.
Перезавантаження унарних операцій
Унарні операції мають лише один операнд. Прикладом унарної операції можуть бути операції зменшення і збільшення – та ++, або унарний мінус: -34.
Раніше (програма 11.4 ) ми створили клас Counter для зберігання значень лічильника. Об’єкт цього класу ми збільшували викликом методу:
c1.inc_count();
Він виконував свою роботу, але лістінг програми стане зрозумілішим, якщо ми використаємо замість цього запису операцію збільшення ++.
++с1;
Модернізуємо програму 11.4 так, щоб зробити цю дію можливою. Приведемо лістінг програми 14.1.
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Counter
{private:
unsigned int count;
public:
Counter():count(0) //Конструктор
{ };
void operator++()
{++count;}
unsigned int get_count()
{return count;}
};
int main()
{
clrscr();
Counter c1,c2;
cout << “\nc1=”<<c1.get_count();
cout <<”\nc2=”<<c2.get_count();
++c1;
++c2;
++c2;
cout << “\nc1=”<<c1.get_count();
cout <<”\nc2=”<<c2.get_count();
cout <<endl;
bioskey(0);
return 0;
}
Програма 14.1
В цій програмі ми створили два об’єкти класу Counter: c1 та c2. Значення лічильників виведені на дисплей, спершу вони рівні 0. Потім, використовуючи перезавантаження операції ++, ми збільшуємо с1 на 1, а с2 на 2. Операція ++ один раз використана по відношенню до с1 і двічі по відношенню до с2. В цьому прикладі ми використали префіксну версію операції ++, пізніше пояснимо також постфіксну форму.
Дата добавления: 2015-08-26; просмотров: 804;