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.

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


 

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

18043. РЕГИОНАЛЬНАЯ ЭКОНОМИКА И УПРАВЛЕНИЕ 606 KB
  РЕГИОНАЛЬНАЯ ЭКОНОМИКА И УПРАВЛЕНИЕ Учебнометодическое пособие для студентов специальностей экономического факультета Учебнометодическое пособие содержит пояснительную записку тематический план учебную программу планы семинарских занятий и методические ре...
18044. БАНКОВСКИЙ АУДИТ. Учебник 1021.5 KB
  БАНКОВСКИЙ АУДИТ ПРЕДИСЛОВИЕ В практикуме Банковский аудит углубленно рассмотрены отдельные вопросы теории аудита в связи с практическими заданиями и проблемными ситуациями по данному курсу. Составленные тесты кроссворды задачи и ситуации приведены в соответ
18045. Повопросный конспект по аграрному праву 702 KB
  Преподаватель: Кузьмич И.П. Год: 2004 Другая информация: В данной работе использованы материалы учебника Н.В Сторожева и И.П Кузьмич Аграрное право Республики Беларусь. Курс лекций. Общая часть. Мн.: БГУ 2003. 206 с. а так же конспеты лекций И.П. Кузьмич разных лет нормати
18046. БУХГАЛТЕРСКИЙ УЧЕТ В БАНКАХ 846.5 KB
  БУХГАЛТЕРСКИЙ УЧЕТ В БАНКАХ ПОСОБИЕ для студентов заочной формы обучения ФФБД ВШУБ Оглавление: Введение Курс лекций Литература ...
18047. Профилактика зависимости от ПСИХОАКТИВНЫХ ВЕЩЕСТВ 421 KB
  Организация Объединенных Наций Управление по наркотикам и преступности Профилактика зависимости от ПСИХОАКТИВНЫХ ВЕЩЕСТВ Руководство по разработке и внедрению программ формирования жизненных навыков у подростков группы риска Авторы: Татьяна Воробьева ...
18048. Основы теории электрических и магнитных цепей. Конспект лекций по общей электротехнике 1.74 MB
  Конспект лекций по общей электротехнике Основы теории электрических и магнитных цепей Тема 1. Основные понятия и законы теории цепей. Электрические и магнитные цепи. 1. Основные термины теории электрических цепей Электрическая цепь это модель электромагнитного...
18049. Административный процесс и административно-процессуальные правоотношения 1.85 MB
  Понятие и структура административного процесса. Общая характеристика процесса как юридической категории. Основные черты и подходы к пониманию административного процесса как вида юридического проце...
18050. Ускорители схватывания и твердения в технологии бетонов 1.34 MB
  Ускорители схватывания и твердения в технологии бетонов. Ружинский С.И. Часть 1 Еще пол года назад наш доморощенный Квазимодо страдал по Эсмеральде из каждого динамика. Очень красиво и образно страдал следует отдать ему должное. Благодаря всего одной арии из французс...
18051. Краткосрочная финансовая политика предприятия. Учебное пособие 2.77 MB
  Н.М. Крюкова Учебное пособие. Содержание и значение финансовой стратегии фирмы. Определение целей и задач бизнеса. Содержание и порядок разработки финансовой политики фирмы. Что п...