Зазвичай є або вказівник, або посилання на структуру/клас. Як ми вже знаємо з попередніх уроків, доступ до члена структури здійснюється через оператор вибору члена (.
) (або «оператор доступу до члену»):
1 2 3 4 5 6 7 8 9 |
struct Man { int weight; double height; }; Man man; // Доступ до члену здійснюється через використання фактичної змінної структури Man man.weight = 60; |
Даний синтаксис також працює і з посиланнями:
1 2 3 4 5 6 7 8 9 10 |
struct Man { int weight; double height; }; Man man; // визначаємо змінну структури Man // Доступ до члену здійснюється через посилання на змінну структури Man Man &ref = man; ref.weight = 60; |
Однак, у випадку з вказівником, вам потрібно спочатку його розіменувати:
1 2 3 4 5 6 7 8 9 10 |
struct Man { int weight; double height; }; Man man; // Доступ до члену здійснюється через вказівник на змінну структури Man Man *ptr = &man; (*ptr).weight = 60; |
Зверніть увагу, розіменування вказівника повинно знаходитися в круглих дужках, оскільки оператор вибору члена має більший пріоритет, ніж оператор розіменування.
Оскільки синтаксис доступу до членів структур/класів за допомогою вказівника не дуже зручний, то C++ надає другий оператор вибору членів (->
) для здійснення доступу до членів через вказівник. Наступні два рядки ідентичні:
1 2 |
(*ptr).weight = 60; ptr->weight = 60; |
Це не тільки легше написати, але і цей спосіб так само менш вразливий до створення помилок, оскільки тут розіменування виконується неявно, тому немає проблем з пріоритетом, про який потрібно пам’ятати. Отже, при доступі до членів структур/класів через вказівник, завжди використовуйте оператор ->
замість оператора .
.
Правило: При використанні вказівника для доступу до значення члена структури/класу використовуйте оператор «->» замість оператора «.».