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.

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


 

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

53558. Розв’язування вправ 7 клас 106.5 KB
  Повторення систематизація і узагальнення знань учнів В одному селі жили собі сестричка Олеся і братик Василько. От якось і каже Олеся: Васильку давай гратися в піжмурки. Тільки як братик заховається то Олеся бігає шукає а знайти не може. Допоможемо Олесі виконати завдання незнайомця на екрані 6 усних завдань Повторення систематизація і узагальнення знань учнів Який з графіків зайвий 2 Яка з функцій зайва у= х 3...
53559. Доходность и риск портфеля 37.5 KB
  Инвестиционным портфелем называют сформированную в соответствии с целями инвестора совокупность объектов инвестирования, которая рассматривается как целостный объект управления.
53560. Завітала казка до малят 40 KB
  Погляньте діти як змінився наш друг Сніговик. Я прекрасна Снігова Королева Я зачаклувала Сніговика бо діти частіше згадують про нього аніж про мене. Зайчата що сталося чому ви плачете Зайчик 1: Як нам не плакати коли надворі холодно й ми вже замерзли Зайчик 2: Ми загубилися в лісі й хочемо до своєї матусі Зайчик 3: Хто малих нас пожаліє хто нам лапоньки зігріє Діти жаліють зайченят. Діти гукають Сніг: Снігу Снігу Сніговію ти нам зайчиків зігрій Сніг: Не можу бо боюся що Снігова Королева прожене мене.
53561. Активізація пізнавальної активності учнів при вивченні основ програмування шляхом використання розвивальної казкотерапії 61.5 KB
  У казці можна знайти повний перелік людських проблем і образні способи їх розв’язання. Слухаючи казки в дитинстві, людина поповнює у підсвідомості банк життєвих ситуацій. Цей банк за необхідності може бути активізований, якщо ні — так і залишиться пасивним. Казка поєднує дорослого й дитину.
53562. КАЗКОВІ БУДИНКИ. ТА ЇХ ПРИЗНАЧЕННЯ 57.5 KB
  Замок як величезний павук завис над прірвою учепившись у стрімку скелю. Посріблений місяцем замок робив і без того похмуру місцевість схожою на поріг пекла. Опинившись біля входу в замок уночі ми відчували дикий страх і ледь стримували себе волею і розумом щоб не утекти геть. Кожний із вас побудує свій замок для принцеси і принця для злого чаклуна кому який більше сподобався.
53563. Подорож країною казок з англійської мови. Інсценізація казок «A House in the wood» 149.5 KB
  Our holiday A Wonderful word of Fairy Tale is over. I wish you good luck, good friends and lot of sunny days! Let’s say good-bye to our guests. See you soon!
53564. Оценка риска инвестиционных проектов 27 KB
  По степени наносимого ущерба риски подразделяются на допустимые, критические и катастрофические. Допустимый риск связан с неполучением ожидаемой прибыли, критический – с потерей расчетной выручки от реализации продукции, катастрофический – с потерей вложенных инвестиций и всего имущества.
53565. Практичне заняття щодо використання Законів Кеплера 1.73 MB
  На уроках астрономії в школі обмежується як правило вивченням формулювань і використанням законів для розрахунку параметрів руху планет сонячної системи відповідно до третього закону. Кеплера і практично використати їх для розрахунку часу мандрівки до планет сонячної системи. Всі планети обертаються навколо Сонця по еліптичним орбітам в одному з фокусів яких знаходиться Сонце; 2.Радіусвектор планети за рівні проміжки часу замітає однакові площі; 3.
53566. Класне керівництво - це не робота, це спосіб життя 100 KB
  Організатором діяльності учнів у класі координатором впливів був і залишається класний керівник як автор і як скульптор. Будучи класним керівником вважаю що метою виховного процесу є виховання вільної талановитої фізично здорової особистості збагаченої науковими знаннями естетичними смаками готової до творчої трудової діяльності яка досягається через формування в учнів морального ставлення до оточуючих людей і усвідомлення цінності людського життя через формування культури інтелектуального розвитку і...