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.

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


 

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

24941. Ограниченные вещные права на хозяйствование с имуществом собственника 26 KB
  Ограниченные вещные права на хозяйствование с имуществом собственника Вещными правами на хозяйствование с имуществом собственника относятся право хозяйственного ведения и право оперативного управления. Данные права используются для характеристики имущественной обособленности унитарных предприятий и учреждений. Субъекты права – только юридические лица в форме унитарных предприятий и финансируемых собственником учреждений которые не становятся собственниками имущества т. Собственники как правило публичноправовые образования лишаются права...
24942. Субъекты наследственного правопреемства 37 KB
  Юридические лица могут выступать в качестве наследников только в том случае если в их пользу составлено завещание. Не наследуют ни по закону ни по завещанию граждане которые своими умышленными противоправными действиями направленными против наследодателя коголибо из его наследников или против осуществления последней воли наследодателя выраженной в завещании способствовали либо пытались способствовать призванию их самих или других лиц к наследованию либо способствовали или пытались способствовать увеличению причитающейся им или другим...
24943. Наследование по завещанию 59.5 KB
  Запрет на распоряжение имуществом на случай смерти какимлибо образом кроме совершения завещания предотвращает также заключение притворных сделок или обход строгих правил о форме завещания и т. Составление завещания через представителей поверенных опекунов попечителей не допускается. Не допускаются и совместные завещания известные за рубежом. Взаимные завещания также исключаются.
24944. Наследование по закону 50.5 KB
  Рождение самого наследодателя в это число не входит. Наследниками первой очереди по закону являются дети супруг и родители наследодателя. Внуки наследодателя и их потомки наследуют по праву представления. Наследниками второй очереди являются полнородные и неполнородные братья и сестры наследодателя его дедушка и бабушка как со стороны отца так и со стороны матери.
24945. Принятие наследства и отказ от наследства 67 KB
  Принятие наследства и отказ от наследства Принятие наследства Принятие наследства как и отказ от наследства односторонние сделки совершаемые наследником. И принятие и отказ от наследства действуют с обратной силой во времени. Это означает что наследник принявший наследство приобретает право не только на то имущество которое оказалось в наличии в момент принятия наследства но и на все то имущество которое было в наличии в момент открытия наследства. Принятие наследства под условием и с оговорками не допускается ст.
24946. Ипотека. Отдельные объекты ипотеки 39 KB
  Ипотека Законодательное регулирование: ГК глава 23 3 Залог ФЗ Об ипотеке залоге недвижимости от 16 июля 1998 г. Общие правила о залоге содержащиеся в ГК применяются к отношениям по договору об ипотеке в случаях когда ГК или ФЗ об ипотеке не установлены иные правила. Определение: по договору о залоге недвижимого имущества договору об ипотеке одна сторона залогодержатель являющийся кредитором по обязательству обеспеченному ипотекой имеет право получить удовлетворение своих денежных требований к должнику по этому обязательству...
24947. Право на товарный знак (знак обслуживания) 38.5 KB
  В настоящее время регулируется Законом О товарных знаках знаках обслуживания и наименовании мест происхождения товаров который теряет силу с 1 января 2008 в связи с вступлением в силу ГК 4 части не вносит существенных изменений в правовое регулирование этого института. Правовая охрана товарному знаку предоставляется при наличии регистрации в Патентном ведомстве в Государственном реестре товарных знаков и знаков обслуживания Российской Федерации в подтверждение которой выдается свидетельство удостоверяющее приоритет знака и...
24948. Гражданско-правовая охрана программных средств для электронно-вычислительной техники 32 KB
  Гражданскоправовая охрана программных средств для электронновычислительной техники Программа для ЭВМ как объект авторского права выступает в качестве объективной формы представления совокупности данных и команд предназначенных для функционирования ЭВМ и других компьютерных устройств с целью получения определенного результата включая подготовительные материалы полученные в ходе разработки программы для ЭВМ и порождаемые ею аудиовизуальные отображения. Независимо от формы своего объективного выражения программы для ЭВМ с точки зрения их...
24949. Виды обязательств. Обязательства с участием третьих лиц 42.5 KB
  Обязательства с участием третьих лиц. В соответствии со сложившейся системой обязательственного права обязательства разделяются по различным группам видам т. При такой классификации эти сделки относят к внедоговорному виду что неправильно так как это искусственно разделяет однородные по сути обязательства из различных сделок действий а с другой объединяют в одну группу обязательства из правомерных действий сделок и из правонарушений. Вывод: правильная классификация на регулятивные договорные и иные обязательства правомерной...