Обращение к компонентам объекта

Что такое статический элемент класса

Что такое друзья класса

Что такое конструкторы и деструкторы. Какие типы конструкторов вы знаете?

Когда необходимо описывать конструктор копирования?

Указатель this

Каждый раз при создании объекта класса строится указатель, называемый this, и содержащий адрес этого объекта. Правильнее сказать, указатель определяется не в момент создания объекта, а в момент вызова любого из методов объекта.

В связи с неявным определением this является константным указателем, т.е. по умолчанию происходит определение:

имя класса *const this = адрес обрабатываемого объекта

При работе с компонентами класса можно использовать указатель this

Эквивалентно:

Class point { int x, y; Class point { int x, y;

public: public:

point(int xx=0, int yy=0) point(int xx=0, int yy=0)

{this-> x=xx; this ->y =yy;}; { x=xx; y =yy;};

Void print (void) void print (void)

{ cout<< this->x <<” “ << this->y;}; {cout<< x <<” “ <<y;};

} }

В таком использовании нет никаких преимуществ.

Иногда используется при конфликте имен, когда имена формальных параметров функций совпадают с именами компонентов класса:

Class point { int x, y; Class point { int x, y;

public: public:

point(int x=0, int y=0) point(int x=0, int y=0)

{this-> x=x; this ->y =y;}; { point::x=x; point::y =y;};

// используя this // используя квалифицированное имя

Часто в функциях- членах класса параметры функции имеют объект некоторого класса (или указатель на объект), а объект еще не существует. Для этого также используется указатель this, обозначающий указатель на тот объект, для которого вызывается данная функция.

Class A

{ int x, y;

public:

A (int xx=0, int yy =0){ x=xx; y = yy; }

A func ();

}

A A:: func() { if (x%2) x++; // функция x преобразующая в четное

return * this;

}

Void main ()

{ A a1 (17, 55)

A a2 = a1. func ();

}

/* Можно объявить так

A* A:: func ()

{ …

return this} */

Чаще всего this используетсяпри организации связанных списков, звеньями которых должны быть объекты класса и встает необходимость включать в связи указатель на тот объект, который в данный момент обрабатывается

Пример: Очередь

#include <iostream.h>

#include<stdio.h>

Class que

{ static que*first; // указатель(адрес)первого элемента очереди

que*next; // указатель на следующий элемент очереди

char bukva; //содержимое элемента очереди

public: // общедоступные функции

que(char c) { bukva = c }; // конструктор

void add (void); // функция добавления элемента в очередь

static void print (void); // вывод содержимого очереди

}

// определения функций:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: