5.4.5 Указатели на Члены

5.4.5 Указатели на Члены

Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в языке имеется дефект: невозможно описать выражением тип указателя, который получается в результате этой операции. Поэтому в текущей реализации приходится жулничать, используя трюки. Что касается примера, который привдится ниже, то не гарантируется, что он будет работать. Ипользуемый трюк надо локализовать, чтобы программу можно было преобразовать с использованием соответствующей языковой контрукции, когда появится такая возможность. Этот трюк исползует тот факт, что в текущей реализации this реализуется как первый (скрытый) параметр функции члена*:

– * Более поздние версии С++ поддерживают понятие указтель на член: cl::* означает «указатель на член класса cl». Например:

typedef void (cl::*PROC)(int); PROC pf1 = amp;cl::print; // приведение к типу ненужно PROC pf2 = amp;cl::print;

Для вызовов через указатель на функцию член используются операции . и -». Например:

(z1.*pf1)(2); (( amp;z2)-»*pf2)(4);

(прим. автора)

#include «stream.h»

struct cl (* char* val; void print(int x) (* cout «„ val «« x «« « “; *); cl(char* v) (* val = v; *) *);

// ``фальшивый' тип для функций членов: typedef void (*PROC)(void*, int);

main() (* cl z1("z1 "); cl z2("z2 "); PROC pf1 = PROC( amp;z1.print); PROC pf2 = PROC( amp;z2.print); z1.print(1); (*pf1)( amp;z1,2); z2.print(3); (*pf2)( amp;z2,4); *)

Во многих случаях можно воспользоваться виртуальными функциями (см. Главу 7) там, где иначе пришлось бы использвать указатели на функции.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Указатели

Из книги автора

Указатели Указатель в С++ — это переменная, содержащая не сам объект, а адрес памяти, где располагается объект. Java и C# имеют аналогичную концепцию «ссылки» при другом синтаксисе. Мы начнем с рассмотрения придуманного нами примера, иллюстрирующего применение указателей:01


R.4.8 Указатели на члены

Из книги автора

R.4.8 Указатели на члены Всюду, где указатели на члены (§R.8.2.3) инициализируются, присваиваются, сравниваются или используются иным образом, могут происходить следующие преобразования:Константное выражение (§R.5.19), которое сводится к нулю, преобразуется в указатель на член.


R.8.2.1 Указатели

Из книги автора

R.8.2.1 Указатели В описании T D, в котором D имеет вид* список-спецификаций-cv opt D1тип описываемого идентификатора есть"… список-спецификаций-cv указатель на T". Конструкция список-спецификаций-cv относится к указателю, а не к указуемому объекту.Например, в описанияхconst ci = 10, *pc =


12. Массивы и указатели

Из книги автора

12. Массивы и указатели МАССИВЫ. МНОГОМЕРНЫЕ МАССИВЫ. ИНИЦИАЛИЗАЦИЯ МАССИВОВ. УКАЗАТЕЛИ И ОПЕРАЦИИ НАД УКАЗАТЕЛЯМИ. СВЯЗЬ МЕЖДУ МАССИВОМ И УКАЗАТЕЛЕМ. ОПЕРАЦИИ  & * (унарные)Между массивами и указателями существует очень тесная связь, поэтому обычно их рассматривают


УКАЗАТЕЛИ МАССИВОВ

Из книги автора

УКАЗАТЕЛИ МАССИВОВ      Как было сказано в гл. 9, указатели позволяют нам работать с символическими адресами. Поскольку в реализуемых аппаратно командах вычислительной машины интенсивно используются адреса, указатели предоставляют возможность применять адреса


Указатели и строки

Из книги автора

Указатели и строки      Возможно, вы заметили периодическое упоминание указателей в нашем рассказе о строках. Большинство операции языка Си, имеющих дело со строками, работает с указателями. Например, рассморим приведенную ниже бесполезную, но поучительную программу /*


УКАЗАТЕЛИ НА СТРУКТУРЫ

Из книги автора

УКАЗАТЕЛИ НА СТРУКТУРЫ      Любители указателей будут рады узнать, что указатели можно использовать и для структур. Это хорошо по крайней мере по трем причинам. Во-первых, точно так же как указатели на массивы, они легче в использовании (скажем, в задаче сортировки), чем


3.3. Указатели

Из книги автора

3.3. Указатели Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2. Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно манипулировать этим объектом. Обычно указатели используются для работы с динамически


13.6.3. Указатели на статические члены класса

Из книги автора

13.6.3. Указатели на статические члены класса Между указателями на статические и нестатические члены класса есть разница. Синтаксис указателя на член класса не используется для обращения к статическому члену. Статические члены – это глобальные объекты и функции,


15.1.1. Члены и не члены класса

Из книги автора

15.1.1. Члены и не члены класса Рассмотрим операторы равенства в нашем классе String более внимательно. Первый оператор позволяет устанавливать равенство двух объектов, а второй – объекта и C-строки:#include "String.h"int main() {String flower;// что-нибудь записать в переменную flowerif ( flower == "lily" ) //


5.4.5 Указатели на Члены

Из книги автора

5.4.5 Указатели на Члены Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в


5.4.5 Указатели на Члены

Из книги автора

5.4.5 Указатели на Члены Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в


7.2.4 Указатели

Из книги автора

7.2.4 Указатели Если производный класс derived имеет открытый базовый класс base, то указатель на derived можно присваивать перменной типа указатель на base не используя явное преобразовние типа. Обратное преобразование, указателя на base в указтель на derived, должно быть явным.


6.4 Указатели и Целые

Из книги автора

6.4 Указатели и Целые Выражение целого типа можно прибавить к указателю или вычесть из него. В таком случае первый преобразуется, как указывается при обсуждении операции сложения.Можно производить вычитание над двумя указателями на объекты одного типа; в этом случае


Указатели

Из книги автора

Указатели Указатель - это ячейка памяти, хранящая адрес. В PascalABC.NET указатели делятся на типизированные (содержат адрес ячейки памяти данного типа) и бестиповые (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа).Тип указателя на