Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Class CRectangle




Class CMessage

Class CO2

Class CO1

{ public:

CO1(int Par1, int Par2)

{

// Код конструктора для CO1

}

}

{ private:

CO1 Obj1;

public:

CO2 (int P1, int P2, int P3): CO1(P1, P2)

{

// Код конструктора для CO2

}

}

 

Деструкторы

Деструктор – это метод класса, автоматически вызываемый при удалении объекта.

Имя деструктора=~имя_класса

Деструктор определяется без типа возврата и может быть без параметров. Деструктор предназначен для выполнения любых задач, которые требуются при удалении объекта.

Пример:

#include<string.h>

{ private:

char *Buf; // хранит строку сообщения

public:

CMessage()

// инициализирует Buf пустой строкой

{ Buf=new char(‘’); }

~CMessage()

// освобождает память

{ delete [] Buf; }

void Display()

// отображает содержимое Buf

{ cout<<Buf<<endl; }

void Set (char *String)

// устанавливает новую строку сообщения

{

Delete [] Buf;

Buf=new char [strlen(String)+1];

Strcpy(Buf, String);

}

}

 

Когда вызываются конструкторы и деструкторы

В общем случае конструктор вызывается при создании объекта, а деструктор – при разрушении объекта.

Специальные случаи:

1. Для глобального объекта (объявленного вне функций) конструктор вызывается в начале выполнения программы перед входом в main, а деструктор – при выходе из программы.

2. Для локального объекта (объявленного внутри функции), конструктор вызывается при определении объекта, а деструктор – при выходе за пределы блока, в котором определен объект.

3. Для локального объекта с ключевым словом static, конструктор вызывается, когда поток программного управления впервые достигает определения объекта, а деструктор вызывается в конце программы.

4. Для динамического объекта с использованием оператора new, конструктор вызывается при создании объекта, а деструктор вызывается, когда объект явно разрушается с использованием оператора delete (если не удалять объект, то деструктор вызываться не будет).

 

Массивы объектов

Пример:

CRectangle RectTab[10];

CRectangle *PRectTab=new CRectangle [10];

Компилятор вызывает конструктор по умолчанию для каждого элемента массива.

При удалении массива компилятор вызывает деструктор для каждого элемента.

Удаление динамического массива:

delete [] PRectTab;

Конструкторы для элементов массива вызываются в порядке возрастания адресов, деструкторы вызываются в обратном порядке.

Inline -Методы

Метод класса можно объявить внутри класса, а определить вне класса.

Если метод определяется вне класса, нужно поставить перед именем функции имя класса с оператором расширения области видимости (::).

Пример:

{ private:

int Left, Top, Right, Bottom;

public:

void Draw();

void SetCoord(int L, int T, int R, int B);

void GetCoord(int *L, int *T, int *R, int *B)

CRectangle(int L, int T, int R, int B);

CRectangle();

}

CRectangle::CRectangle()

{ Left=Top=Right=Bottom=0; }

CRectangle::CRectangle(int L, int T, int R, int B)

{ SetCoord(L, T, R, B); }

void CRectangle::Draw()

{ Line(Left, Top, Right, Top);

Line(Right, Top, Right, Bottom);

Line(Right, Bottom, Left, Bottom);

Line(Left, Bottom, Left, Top);

}

void CRectangle::SetCoord (int L, int T, int R, int B)

{ Left=L; Top=T; Right=R; Bottom=B; }

void CRectangle::GetCoord (int *L, int *T, int *R, int *B)

{ *L=Left; *T=Top; *R=Right; *B=Bottom; }

Функция, которая определена вне класса, по умолчанию обрабатывается как не inline. Для ее обработки как inline -функции нужно указать ключевое слово inline.

Пример:

// внутри класса

void inline CRectangle::GetCoord (int *L, int *T, int *R, int *B);

// вне класса

void inline CRectangle::GetCoord (int *L, int *T, int *R, int *B)

{ *L=Left; *T=Top; *R=Right; *B=Bottom; }

 

Организация исходных файлов

Определение класса вместе с определениями любых inline -методов помещается в заголовочном файле, имеющем расширение *.h. Заголовочный файл включается в каждый файл исходного кода, в котором вызывается класс. Такая организация обеспечивает доступ к определению класса и коду любой inline -функции при вызове класса или метода. Определения любых не inline -методов внутри отдельного файла исходного кода C++ включается в файл реализации класса. Все файлы компонуются путем включения в проект.

 

Указатель this

Указатель this – это предопределенный указатель на текущий объект внутри класса.

Для того, чтобы получить доступ к элементам данных класса из программного кода, который находится вне класса, нужно описать частный экземпляр класса. Следовательно, компилятор знает, какая копия данных доступна.

Пример:




Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 495; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.