Мои Конспекты
Главная | Обратная связь


Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

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



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

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

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

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

 

Указатель 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);// вывод содержимого очереди

}

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

void que::add(void)

{ que* list= first ; // вспомогательный указатель устанавливается на

// начало очереди

que * uk ; // вспомогательный указатель для продвижения по

//очереди

while(list!=NULL) { uk = list ; list=list->next }//продвижение по очереди

if( uk!=NULL) {uk->next=this; }//присоединение в конец очереди

else first = this; //очередь пустая

this->next=NULL; }

void que::print (void)

{ que *list = first ;// устанавливаем на начало очереди

if ( list = = NULL) {cout << “ список пуст”; return; }

else cout<<”содержимое списка :”

while( list!=NULL)

{ cout<< list->bukva; list= list->next; }//выводим и продвигаемся по

// очереди

}

que * que :: first = NULL;//инициализация статического компонента

Void main( )

{ //формируем объекты класса

que A( ‘a’) ; que B(’b’ ) ; queC(‘c’); queD(‘d’);

que::print( ); // выводим фразу, что список пуст

A.add( ); B.add( ); C.add( ); D.add( );//включаем в список

// элементы

que::print( ); } //выводим список




Поиск по сайту:







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.