Операторы указания на члены .* и ->*
Язык C++ позволяет генерировать специальный тип указателя, который отсылает не к конкретному экземпляру этого члена в объекте, а к члену классы вообще. Данный вид указателя называется указателем на член. Указатель на член — это совсем не тоже самое, что обычный указатель, поддерживаемый в языке C++. Указатель на член представляет всего лишь смещение в объекте класса, которому этот член может принадлежать. Поскольку указатели на члены не являются настоящими указателями, к ним нельзя применять операторы . и ->. Для получения доступа к члену класса, заданного указателем, необходимо использовать специальные операторы указания на члены .* и ->*. При доступе к члену объекта, заданного самим объектом или ссылкой на него, используется оператор .*. При доступе к члену, заданному указателем на объект, используется оператор ->*. Указатель на член объявляется с помощью с помощью следующей формы записи. тип имя_класса::*ptr;Здесь тип представляет собой базовый тип члена, имя_класса задаёт имя класса, а ptr — это имя создаваемой переменной указателя на член. После создания элемент ptr может отсылать к любому члену класса, который имеет тип, заданный элементом тип. Ниже приведён короткий пример, демонстрирующий использование оператора .*. Обратите внимание на способ указывания на члены. #include <iostream.h> class cl { public: cl (int i){ val = i; } int val; int double_val(){ return val + val; } }; int main() { int cl::*data; //указатель на член с именем data типа int int (cl::*func)() //указатель на член с именем func cl ob1(1), ob2(2); //создаём объекты data = &cl::val; //получаем смещение func = &cl::double_val; //получаем смещение cout << "Вот исходные значения "; cout << ob1.*data << " " << ob2.*data << "\n"; cout << "А теперь они удвоены "; cout << (ob1.*func)() << " "; cout << (ob2.*func)() << "\n"; return 0; } |
Нет комментариев. Оставить комментарий: |