Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Конструкторы и деструкторы.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
78.38 Кб
Скачать

Int X, y ; public:

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

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

; //эквивалентно:x=xx ; y = yy;

Void print ( void)

{cout<< this->x <<""<< this->y; }; //эквивалентно:cout<< x <<""<<y;

};

В таком использовании нет никаких преимуществ, так как данные объектов доступны в методах класса и с помощью имен полей данных.

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

сlass point { int x, y ;

public:

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

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

};

Для снятия неоднозначности можно с тем же успехом использовать квалифицированные имена полей данных:

point ::x = x; point :: y = y;

Однако в некоторых случаях использование указателя this становится практически незаменимым и удобным.

Например, когда в теле метода класса необходимо явно использовать адрес того объекта, для которого метод вызывается.

Пример:

class A{

int x, y ;

public:

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

A func ( );

};

A A :: func ( ) // функция, преобразующая данное x в четное

{

if ( x%2) x++;

return *this;

}

Int main ()

{ A a1 (17, 55);

A a2 = a1.func ();

}

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

В качестве примера рассмотрим класс "очередь". Спецификация класса определена в файле mem.h:

#ifndef _mem

#define _mem

сlass que {

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

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

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

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

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

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

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

};

#endif

Схема построения очереди показана на рис. 2.3.

first =0 Пустая очередь

first =this

bukva

next

0

Один элемент

Начало очреди конец очереди

bukva

next

bukva

next

bukva

next

0

first

bukva

next

0

this

Рис.2.3. Схема формирования очереди из объектов класса que

В классе que имеется статический элемент first, общий для всех объектов класса – это указатель на первый элемент очереди.

Когда очередь пуста, значение first должно быть равно нулевому указателю.

Связь между объектами в очереди осуществляется с помощью указателя next.

Подключение элементов в очередь выполняет метод add(). Статическая функция print() "перебирает" звенья очереди от начала к концу и выводит символы – данные объектов.

Конструктор инициализирует поле данных char bukva для каждого создаваемого объекта.

В файле func_que.h определим методы класса.

#ifndef _method

#define _method

#include <iostream>

//Включаем спецификацию класса

#include"mem.h"

//----------------------Определения функций----------------------------

//Добавление элемента в конец очереди