Что такое статический элемент класса
Что такое друзья класса
Что такое конструкторы и деструкторы. Какие типы конструкторов вы знаете?
Когда необходимо описывать конструктор копирования?
Указатель 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); // вывод содержимого очереди
}
// определения функций: