КАТЕГОРИИ: Архитектура-(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; Просмотров: 522; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |