БЕСПЛАТНОЕ РЕШЕНИЕ ЗАДАЧ

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

Кроме указателей на объекты класса, в С++ существуют указатели на от­ дельные члены класса. Указатель на отдельный член существенно отлича­ется от обычного указателя, как по способу объявления, так и по методам использования. Указатель на член класса задает смещение этого члена. В некотором смысле это относительный адрес члена класса в структуре класса. Указатели на члены класса могут ссылаться как на поля, так и на методы. Объявление указателей на поля и на методы выполняется по-разному. При объявлении указателя на поле класса указывается тип для указателя, со­ впадающий с типом поля, на которое ссылается указатель, а перед име­нем указателя, кроме обычного в таких случаях оператора *, через опера­ тор расширения контекста ::, указывается и имя класса.

#include 
using namespace std;
//Объявление класса:
class MyClass{
public:
int m;
double n;
MyClass(int x,double y){
m=x;
n=y;}
void show(bool arg){
if(arg) cout << "m = " << m << endl;
else cout << "n = " << n << endl;}
}a(1,2.5),b(3,4.8);
int main(){
//Объявление указателя на поле класса:
int MyClass::*p;
//Объявление обычного указателя:
double *q;
//Объявление указателя на объект:
MyClass *op;
//Объявление указателя на метод класса:
void (MyClass::*s)(bool arg);
//Указателю на поле класса присваивается значение:
p=&MyClass::m;
//Обычному указателю присваивается адрес поля объекта:
q=&a.n;
//Присваивается значение указателю на метод класса:
s=&MyClass::show;
//Присваивается значение указателю на объект:
op=&b;
//Обращение к полю объекта через указатель на поле класса:
cout << "a.m: " << a.*p << endl;
//Обращение к полю объекта через указатель на поле класса
// и указатель на объект:
cout << "b.m: "<*p << endl;
//Обращение к полю объекта через обычный указатель:
cout << "a.n: " << *q << endl;
cout << "a.show():\n";
//Вызов метода объекта через указатель на метод класса:
(a.*s)(true);
cout << "b.show():\n";
//Вызов метода объекта через указатель на метод класса
// и указатель на объект:
(op -> *s)(false);
return 0;
}

Оставить комментарий

Вы должны быть авторизованы , чтобы оставить или оценить комментарий.

Онлайн всего: 10
Гостей: 10
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте