Операторы указания на члены .* и ->*
Язык 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;
}
|
Нет комментариев. Оставить комментарий: |