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.

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


 

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

12945. Моя будущая профессия 347.5 KB
  Класс: 8 А Вид воспитательной деятельности: интеллектуально-познавательная деятельность. Форма воспитательной работы: беседа. Тема: Моя будущая профессия. Цели: образовательные: раскрытие учащимися практической и теоретической значимо
12946. Тренинг-классный час с презентацией о вреде алкоголя 315.58 KB
  Тренингклассный час с презентацией о вреде алкоголя Данный урок взят с сайта Фестиваль педагогических идей. Автор открытого урока Волкова Оксана Викторовна. Этот прекрасный подход в объяснении нашим детям вреда алкоголя можете применить и вы разговаривая с собстве
12947. Газ опасным может стать, если правила не знать 44.5 KB
  Тема: Газ опасным может стать если правила не знать Цели: познакомить учащихся с правилами обращения с газом сформировать у подрастающего поколения знания о правилах безопасного пользования газом в быту способствовать формированию у учащихся представлений ...
12948. Анализ воспитательного мероприятия на тему «Кто такой настоящий друг» 16.88 KB
  Анализ воспитательного мероприятия. Воспитательное мероприятие на тему Кто такой настоящий друг было проведено мной Силантьевой Екатериной Геннадьевной в 1А классе СОШ №4. Тема классного часа: Кто такой настоящий друг Форма проведения: конкурсная программа с э
12949. Психолого-педагогический анализ воспитательного дела 18.14 KB
  Психологопедагогический анализ воспитательного дела Школа: специализированная школа №43 Класс: 6Б Вид работы: классный час Дата: 16.04.2013 Тема: Вред от сигарет Проведен: Берстнев Д.С. Анализ Тема данного классного часа была включена в план воспитательн...
12950. Классный час «Навечно памятью дано» 56.5 KB
  КЛАССНЫЙ ЧАС НАВЕЧНО ПАМЯТЬЮ ДАНО Классный час Навечно памятью дано устный исторический журнал Цель: патриотическое воспитание школьников. Задачи: воспитывать любовь к Родине патриотизм чувство товарищества гордость за славные боевые традиции стра...
12951. Классный час «Василий Тёркин» - строки, опалённые войной 73.5 KB
  Единый классный час Василий Тёркин строки опалённые войной к 70 летию со дня начала публикации в газете Западного фронта Красноармейская правда поэмы А.Т. Твардовского Василий Тёркин Цели урока: 1 раскрыть гражданское мужество поэта; показать роль по...
12952. Методика организации и проведения классных часов 100.5 KB
  ТЕМА: Методика организации и проведения классных часов. ПЛАН Понятие классный час его задачи. Функции классного часа. Формы проведения классных часов. Подготовка классного часа. Проведение классного часа. Понятие классный...
12953. Неформалы – путь к себе или от себя. Классный час для школьников 6-го класса 41.54 KB
  Классный час для школьников 6го класса Тема: Неформалы путь к себе или от себя НЕФОРМАЛЫ ПУТЬ К СЕБЕ ИЛИ ОТ СЕБЯ Час общения о неформальных движениях Что не развилось в молодости То останется не развитым на всю жизнь Д.И.Писарев Кто в 16 лет не революционе...