- •1. Конструкторы и деструкторы
- •Конструкторы.
- •Int II; float ee; char cc;
- •Конструктор с параметрами или конструктор общего вида.
- •Конструктор с аргументами, задаваемыми по умолчанию.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Определение конструктора копирования.
- •Деструкторы
- •Int main () {
- •Int main ( ) {
- •Void Print ( My obj )
- •Int main ( ) {
- •2. Указатели на поля данных и на методы класса.
- •Int main (){
- •3.Указатель this
- •Int X, y ; public:
- •Void print ( void)
- •Int main ()
- •Void que::add( ) {
- •Void que::print (void)
- •Int main( )
- •4. Перегрузка функций
- •Перегрузка конструкторов
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 |
|
0 |
Один элемент |
Начало очреди конец очереди
bukva |
next |
|
bukva |
next |
|
bukva |
|
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"
//----------------------Определения функций----------------------------
//Добавление элемента в конец очереди

next
next