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.

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


 

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

4430. Технологический процесс производства вареных колбас 927.71 KB
  Введение Предприятия мясной промышленности нашей страны оснащены большим количеством (более 400 наименований) технологического оборудования. Рациональная эксплуатация оборудования требует глубокого знания его особенностей и конструктивных признаков....
4431. МАКРОЭКОНОМИКА: ЕЁ ОСОБЕННОСТИ И СТРУКТУРА. 586.5 KB
  Тема: Макроэкомика: её особенности и структура. Предмет, специфические черты макроэкономики, показатели макроэкономики Н/Х показатели материального производства Система национальных счетов: а) принципы национальных счетов ...
4432. Расчет строительных конструкций в ПК лира. Рама 697.33 KB
  Введение Программный комплекс ЛИРА (ПК ЛИРА) – это многофункциональный программный комплекс для расчета, моделирования работы, исследования и проектирования строительных конструкций различного назначения. ПК ЛИРА с успехом применяется в расчета...
4433. Экспертиза галантерейных изделий из пластмасс 154 KB
  Экспертиза галантерейных изделий из пластмасс Факторы, формирующие ассортимент и потребительские свойства галантерейных изделий из пластмасс и поделочных материалов К факторам, формирующим ассортимент и потребительские свойства изделий, относят...
4434. Механические свойства материалов 3.91 MB
  Напряжения и деформации Тема Напряжения и деформации (2 часа) План лекции Современная трактовка физического и технического смысла важнейших механических свойств. Напряжения. Нормальные и касательные напряжения. Тен...
4435. Математические основы цифровой обработки сигналов 80.5 KB
  Математические основы цифровой обработки сигналов Задан дискретный сигнал вида. Найти Z-преобразование сигнала. Решение. Заданной последовательности отсчетов дискретного ставится в однозначное соответствие ...
4436. Ультрозвуковая мойка деталей 141.5 KB
  Ультрозвуковая мойка деталей. Качество моечно-очистных работ в большой мере определяет надежность отремонтированных автомобилей, агрегатов, их узлов и деталей. Так, например, неудаленная из водяной рубашки двигателя накипь нарушает тепловой режим ег...
4437. Электрические сети и системы учебное пособие 2.63 MB
  Введение При выполнении курсового проектирования по дисциплине Электрические сети и системы студенты закрепляют, углубляют и обобщают теоретические вопросы и практические навыки проектирования, расчета и анализа режимов электрических сетей. Общая за...
4438. Центральные банки 126 KB
  Центральные банки Правовой статус Центральных банков Взаимоотношения Центральных банков и органов управления государством Цели, задачи и функции Центральных банков Особенности структуры и деятельности Центральных банков разны...