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.

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


 

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

79223. Общая характеристика преступлений в сфере экономической деятельности 33.62 KB
  Статьи данной главы направлены на защиту законной предпринимательской деятельности охрану естественной государственной монополии на товарноденежную систему изделия драгоценные металлы права потребителей товаров и услуг защиту таможенных и налоговых отношений установленных в Российской Федерации. С учетом коренных изменений...
79224. Незаконное предпринимательство 33.01 KB
  171 УК РФ предполагает осуществление предпринимательской деятельности в нарушение установленного порядка регистрации лицензирования или в нарушение условий лицензирования. Непосредственный объект преступления общественные отношения регулирующие порядок занятия предпринимательской деятельностью. Объективная сторона преступления выражается в осуществлении предпринимательской деятельности либо без регистрации либо без специального разрешения лицензии в случаях когда такое разрешение обязательно или с нарушением условий лицензирования...
79225. Лжепредпринимательство 33.27 KB
  173 УК РФ определяется как создание коммерческой организации без намерения осуществлять предпринимательскую или банковскую деятельность имеющее целью получение кредитов освобождение от налогов извлечение иной имущественной выгоды или прикрытие запрещенной деятельности причинившее крупный ущерб гражданам организациям или государству. Этапы такой деятельности: подготовка необходимых документов принятие устава регистрация получение лицензии и т. Примеров такой деятельности к сожалению в настоящих условиях много. Субъектом преступления...
79226. Убийство. Понятие и виды 33.77 KB
  Основной состав убийства. Понятие убийства законодателем закреплено в ч. Квалифицированные виды убийства Квалифицированный состав отличается от основного состава тем что к признакам основного состава присоединяются дополнительные признаки они становятся обязательными либо отдельные признаки основного состава видоизменяются что влечет за собой повышение степени общественной опасности совершенного преступления. К квалифицированным видам убийства законодателем отнесены следующие: а двух или более лиц; б лица или его близких в связи с...
79227. Легализация (отмывание) денежных средств или иного имущества, приобретенного незаконным путем 34.13 KB
  Легализация отмывание денежных средств или иного имущества приобретенных другими лицами преступным путем ст. Предмет данного преступления денежные средства или иное имущество приобретенные преступным путем. Непосредственный объект преступления отношения регулирующие денежное обращение и иные имущественные отношения в экономической деятельности.
79228. Недопущение, ограничение или устранение конкуренции 36.27 KB
  Конкуренция это соперничество хозяйствующих субъектов при котором самостоятельными действиями каждого из них исключается или ограничивается возможность каждого из них в одностороннем порядке воздействовать на общие условия обращения товаров на соответствующем товарном рынке. Признаками ограничения конкуренции являются сокращение числа хозяйствующих субъектов не входящих в одну группу лиц на товарном рынке рост или снижение цены товара не связанные с соответствующими изменениями иных общих условий обращения товара на товарном рынке...
79229. Изготовление или сбыт поддельных денег или ценных бумаг 34.04 KB
  Изготовление или сбыт поддельных денег или ценных бумагст. Данная статья предусматривает уголовную ответственность за полную или частичную подделку фальшивомонетничество банковских билетов ЦБ РФ монет государственных ценных бумаг иных ценных бумаг в национальной или иностранной валюте. Объективная сторона преступления включает действия: а изготовление с целью сбыта поддельных денег или ценных бумаг; б сбыт поддельных денег или ценных бумаг.
79230. Контрабанда. Состав и виды 33.95 KB
  188 УК РФ заключается в незаконном перемещении через таможенную границу Российской Федерации товаров или иных предметов совершенном помимо или с сокрытием от таможенного контроля либо с обманным использованием документов или средств таможенной идентификации либо сопряженном с недекларированием или недостаточным неполным декларированием таких товаров предметов. Непосредственный основной объект преступления отношения регулирующие товарооборот перемещение через таможенную границу товаров и обеспечивающие поступление в бюджет таможенных...
79231. Невозвращение из-за границы средств в иностранной валюте 32.5 KB
  Невозвращение изза границы средств в иностранной валюте ст. 193 УК РФ устанавливает ответственность руководителей организаций за невозвращение изза границы валютных средств подлежащих обязательному перечислению на счета уполномоченного банка Российской Федерации. Непосредственный объект преступления отношения регулирующие внешнеэкономическую деятельность и расчеты совершаемые в иностранной валюте.