68947

Вказівники на члени класу

Лекция

Информатика, кибернетика и программирование

Вказівник такого вигляду називається вказівником на член класу. Цей незвичайний вказівник задає зсув усередині об’єкту відповідного класу. Оскільки вказівники на члени класу не є вказівниками в звичайному сенсі слова до них не можна застосовувати операторів.

Украинкский

2014-09-27

32 KB

2 чел.

Лекція № 9

Тема: Вказівники на члени класу

У мові C++ існує особливий тип вказівника, який посилається на член класу взагалі, а не на конкретний екземпляр цього члена в об'єкті. Вказівник такого вигляду називається вказівником на член класу. Цей незвичайний вказівник задає зсув усередині об'єкту відповідного класу. Оскільки вказівники на члени класу не є вказівниками в звичайному сенсі слова, до них не можна застосовувати операторів "." і "->". Щоб звернутися до члена класу за допомогою вказівника на нього, слід застосовувати особливих операторів: ".*" і "->*". Розглянемо приклад.

#include <iostream>

using namespace std;

class cl {

public:

cl(int i) { val=i; }

int val;

int double_val() { return val+val; }

};

int main()

{

int cl::*data; // Вказівник на член класу

int (cl::*func)(); // Вказівник на функцию-член

cl obl(l), ob2(2); // Створюємо об'єкти

data = &cl::val; // Визначуваний зсув члена val

func = &cl::double_val; // Визначуваний зсув функції double_val()

cout « "Значення: ";

cout « obl.*data « " " « ob2. *data « "\n",-

cout « "Подвоєні значення: "; cout « (obl.*func)() « " "; cout « (ob2.*func)() « "\n";

return 0;

}

Ця програма створює два вказівники на члени класу: data і func. Звернете особливу увагу на синтаксичні особливості їх оголошень. Оголошуючи вказівники на члени, слід задавати ім'я класу і застосовувати оператора дозволу області видимості. Крім того, програма створює два об'єкти класу cl: obi і оЬ2. Вказівники на члени класу можуть посилатися як на змінні, так і на члени. Потім обчислюються адреси членів val і double_val (). Ці "адреси" є зсуви відповідних членів в об'єкті класу cl. Значення, що зберігаються в змінній val в кожному з об'єктів, виводяться на екран за допомогою вказівника data. На закінчення програма викликає функцію double_func (), використовуючи змінну func, що є вказівником на член класу. Звернете увагу на те, що для правильного виконання оператора ".*" необхідні додаткові дужки.

Для доступу до члена класу через об'єкт або посилання на нього використовується оператор ".*". Якщо заданий вказівник на об'єкт, для доступу до його членів необхідно застосовувати оператора "->*". Проілюструємо сказане наступним прикладом.

#include <iostream>

using namespace std;

class cl {

public:

cl(int i) { val=i; }

int val;

int double_val() { return val+val; }

};

int main() {

int cl::*data; // Вказівник на переменную-член

int (cl::*func)(); // Вказівник на функцию-член

cl obl(l), ob2(2); // Створюємо об'єкти

cl *pl, *р2;

pi = &оЫ; // Доступ до об'єкту через вказівник р2 = &оЬ2;

data = &cl::val; // Визначуваний зсув змінної val

func = &cl::double_val; // Визначуваний зсув функції double_val()

cout << "Значення: ";

cout « pl->*data « " " « p2->*data « "\n";

cout << "Подвоєні значення: "; cout « (pl->*func)() « " "; cout << (p2->*func) (). « "\n";

return 0;

}

У цьому варіанті програми змінні pi і р2 є вказівниками на об'єкти класу cl, тому для доступу до членів val і double_func () застосовується оператор "->*".

Запам'ятаєте, що вказівники на члени відрізняються від вказівників на конкретні елементи об'єкту. Розглянемо фрагмент програми, вважаючи, що клас cl оголошений, як показано вище.

int cl::*d; int *p; cl про;

p = &o.val // Адреса конкретної змінної val

d = &cl::val // Зсув узагальненої змінної val

Тут вказівник р посилається на цілочисельну змінну, що належить конкретному об'єкту. В той же час змінна d зберігає зсув члена val усередині будь-якого об'єкту класу cl.

Як правило, оператори, пов'язані з вказівниками на члени класу, застосовуються у виняткових ситуаціях. У повсякденному програмуванні вони зазвичай не використовуються.


 

А также другие работы, которые могут Вас заинтересовать

18825. Грошовий оборот. Грошовий обіг 294 KB
  Тема 2 Сутність та економічна основа грошового обороту Модель грошового обороту. Грошові потки та їх балансування. Структура грошового обороту за економічним змістом та формою платіжних засобів Маса грошей в обороті. Грошові агрегати та грошова база.
18826. ГРОШОВИЙ РИНОК. Графічна модель грошового ринку 295 KB
  Тема 4 ГРОШОВИЙ РИНОК 3.1. Сутність та особливості функціонування грошового ринку. 3.2. Інституційна модель грошового ринку. 3.3. Структура грошового ринку. 3.4. Попит на грошові. 3.5. Пропозиція грошей. 3.6. Графічна модель грошового ринку. Рівновага на грошовому ринку...
18827. Грошові системи. Монетизація бюджетного дефіциту та валового внутрішнього продукту 78 KB
  Тема 5: Грошові системи. 1. Поняття грошової системи та її елементи. 2. Типи грошових систем. Системи обігу металевих та кредитнопаперових грошей. 3. Грошовокредитна політика її цілі та інструменти. 4. Монетизація бюджетного дефіциту та валового внутрішнього прод
18828. ІНФЛЯЦІЯ ТА ГРОШОВІ РЕФОРМИ 129.5 KB
  Тема 6 ІНФЛЯЦІЯ ТА ГРОШОВІ РЕФОРМИ 1. Загальна характеристика інфляції 2. Соціальноекономічні наслідки інфляції 3. Державне регулювання інфляції 4. Грошові реформи 1. Загальна характеристика інфляції Суть інфляції. Інфляція це знецінення нерозмінних на золот...
18829. КРЕДИТ У РИНКОВІЙ ЕКОНОМІЦІ. Розвиток кредитних відносин у перехідній економіці України 449.52 KB
  Конспект лекцій з дисципліни Гроші та кредит Тема 7 КРЕДИТ У РИНКОВІЙ ЕКОНОМІЦІ 1. Необхідність кредиту 2. Суть кредиту 3. Функції і роль кредиту. 4. Форми та види кредиту 5. Розвиток кредитних відносин у перехідній економіці України. 1. Необхід...
18830. Фінансові посередники грошового ринку 377 KB
  Тема 8 Фінансові посередники грошового ринку. 1. Суть призначення та види фінансового посередництва. 2. Банки як субєкти фінансового посередництва. 3. Банківська система: сутність принципи побудови та функції. 4. Небанківські фінансовокредитні установи. ...
18831. Центральні банки. Призначення статус та основи організації ЦБ 675.5 KB
  Тема 9 Центральні банки Призначення статус та основи організації ЦБ Основні напрями діяльності ЦБ Походження та розвиток ЦБ Становлення ЦБ в Україні Головне призначення центрального банку це управління грошовим оборотом з метою забезпеч
18832. Комерційні банки 268 KB
  Тема 10 Комерційні банки. 1. Поняття призначення та класифікація комерційних банків. 2. Походження та розвиток комерційних банків. 3. Основи організації та специфіка діяльності окремих видів комерційних банків. 4. Активні та пасивні операції комерційних банків. 5. Р...
18833. Валютний ринок і валютні системи 552 KB
  Тема 11: Валютний ринок і валютні системи. Сутність валюти та валютних відносин. Конвертованість валюти. Валютний ринок. Види операцій на валютному ринку. Валютний курс. Валютні системи та валютна політика. Платіжний баланс. Світова валютна система ...