Справочник по C/C++
Операторы указания на члены .* и ->*

Язык 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;
}






Нет комментариев.



Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: