Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Конструкторы и деструкторы

 

Классы в Си++ имеют две специальные функции, называемые

конструктором и деструктором.

Конструкто р (constructor) — это функция (метод), которая

автоматически вызывается при создании экземпляра класса и который строит в


 

памяти объект данного класса и используется для инициализации данных-

членов класса.

Конструктор имеет имя, идентичное имени класса и не имеет

возращаемого значения. Для конструктора не указывается тип возвращаемого

значения (дажtе void недопустим).

 

Описание конструктора имеет следующий формат:


имя_ конструктора (список_ параметров)


{тело_ конструктора}


Конструктор может иметь значения параметров по умолчанию, которые

задаются в списке параметров.

В вызове конструктора по сравнению с другими методами существуют

следующие особенности:

· если конструктор не вызывается явно, то он будет вызван автоматически

при создании объекта с использованием значений параметров по умолчанию;

· если конструктор не описан явно, то он генерируется транслятором без

участия программиста.

Для передачи значений элементам данных объекта с помощью конструктора

существует два формата записи. Первый из них:

имя_ класса имя_ объекта = имя_ конструктора (список_

аргументов); Второй, более короткий, формат вызова конструктора имеет

вид:

имя_ конструктора имя_объекта (список_ аргументов);

Если в классе нет явного определения конструктора, то компилятор

C++Builder создает конструктор по умолчанию (default constructor).

Класс может иметь более одного конструктора. Это возможно благодаря

перегрузке функций.

Фу нкция-конструктор может иметь параметры по умолчанию:

 

Sphere (float xcoord, float ycoord = 2.0,

float zcoord = 2.5, float radius = 1.0)

{ x = xcoord; у = ycoord; z = zcoord; r = radius;}

 

Можно создать сферу любой из следующих команд:

Sphere s(l.O); // Использование всех возможных аргументов по

умолчанию

Sphere t(1.0, 1.1); // Явно указывается координата у

Sphere u(1.0, 1.1, 1.2);// Явно указываются координаты у и z

Sphere v(1.0, 1.1, 1.2, 1.3); // Отменяются все параметры по умолчанию

 

Деструктор (destructor) — это специальная функция, которая авто-

матически вызывается перед уничтожением объекта.


 

Деструктор является противоположностью конструктору. Обычно он используется для освобождения

 

памяти, выделенной классу, или выполняет другие задачи, например, такие, как вывод последних

 

значений данных-членов класса. Класс может иметь не более одного деструктора.

 

Деструктор не должен иметь ни параметров, ни типа возвращаемого

значения. Описание деструктора имеет следующий формат:

~имя класса() {операторы_тела_деструктора}

Наличие деструктора не является обязательным. Деструктор не возвращает никакого значения и не

 

принимает аргументов. Его имя образуется из имени класса с добавлением впереди тильды (~).

 

Ниже приводится класса sphere, который содержит функцию-

конструктор- деструктор и функцию-объем:

 

Пример:

#include <math.h>

 

class Sphere

{ public:

float r; // Радиус сферы

float x, у, z; // Координаты сферы

Sphere (float xcoord, float ycoord,float zcoord, float radius)

{ x = xcoord; у = ycoord; z = zcoord; r = radius; }

~Sphere () {

cout << "Sphere (" << x << “,” << у <<", "<< z << ", " << r << ")

destroyed\n";}

float volume ()

{return (r*r*r*4* M_PI/3);}

float surface()

{return (r * r * 4 * M_PI);}

};

void main(void)

{

Sphere s (1.0, 2.0, 3.0, 4.0);

cout << "X = " << s.x << "Y ="<< s.y<<"Z ="<< s.z<<"R =

"<<s.r<<"\n";

cout << "The volume is " << s.volume()<< "\n";

cout <<"The surface is"<<s. surfacea () «"\ n";

}

//Результат работы программы

Х=1 Y = 2 Z = 3 R = 4 The volume is 268.083

surface area is 201.062

Sphere (1, 2, 3, 4) destroyed


 

После того, как определен класс, можно создавать переменные типа

класса. Такие переменные называются экземпляры класса.

Формат объявления класса <имя класса><имя экземпляра>:

Sphere Variable;

Разработка объектов опирается на понятие инкапсуляция.

 

<== предыдущая лекция | следующая лекция ==>
Class Rect | Использование функций-членов
Поделиться с друзьями:


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


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



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




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