Конструкторы и деструкторы
Содержание
Введение
- Конструкторы
в С++
4 стр. - Создание
простого конструктора
4 стр. - Представление
о конструкторе
7 стр. - Конструкторы и параметры по умолчанию 7 стр.
- Перегрузка
конструкторов
8 стр. - Деструкторы
в С++
11 стр. - Представление
о деструкторе
11 стр. - Деструкторы
15 стр.
Заключение
- Практическая
часть
16 стр.
Список использованой
литературы
ВВЕДЕНИЕ
Исторически сложилось так, что программирование возникло и развивалось как процедурное программирование, которое предполагает, что основой программы является алгоритм, процедура обработки данных. Объектно-ориентированное программирование - это методика разработки программ, в основе которой лежит понятие объекта как некоторой структуры, описывающей объект реального мира, его поведение. Задача, решаемая с использованием методики объектно-ориентированного программирования, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними. Другими словами можно сказать, что объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение. Оно является естественной эволюцией более ранних нововведений в разработке языков программирования. Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.
Использование объектно-ориентированного программирования является хорошим решением при разработке крупных программных проектов. Чем проект объемнее и сложнее, тем больше выгоды вы получите при использовании объектно-ориентированной технологии программирования. Одним из наибольших преимуществ объектно-ориентированного программирования является возможность многократного использования программного кода. Если вы, к примеру, создали класс, то можете порождать от него новые классы и изменять их свойства и функциональное назначение.
Объектно-ориентированное программирование требует оставить в стороне характерные представления о программировании, которые долгие годы рассматривались как стандартные. Однако после того, как это сделано, объектно-ориентированное программирование становится простым, наглядным и превосходным средством разрешения многих проблем, которые доставляют неприятности традиционному программному обеспечению.
При
создании объектов одной из наиболее
широко используемых операций которая
будет выполняться в
- Конструктор представляет собой метод класса, который облегчает программам инициализацию элементов данных класса.
- Конструктор имеет такое же имя, как и класс.
- Конструктор не имеет возвращаемого значения.
- Каждый раз, когда программа создает переменную класса, C++ вызывает конструктор класса, если конструктор существует.
- Многие объекты могут распределять память для хранения информации; когда уничтожается такой объект, C++ будет вызывать специальный деструктор, который может освобождать эту память, очищая ее после объекта.
- Деструктор имеет такое же имя, как и класс, за исключением того, что он должен предварять свое имя символом тильды (~).
- Деструктор не имеет возвращаемого значения.
конструктор
это функция, которая помогает строить
(конструировать) объект. Подобно этому,
деструктор представляет собой функцию,
которая помогает уничтожать объект.
Деструктор обычно используется, если
при уничтожении объекта нужно
освободить память, которую занимал
объект.
- Конструкторы в C++
- Создание простого конструктора
Конструктор представляет собой метод класса, который имеет такое же имя, как и класс. Например, если используется класс с именем employee, конструктор также будет иметь имя employee. Подобно этому, для класса с именем dogs конструктор будет иметь имя dogs. Если программа определяет конструктор, C++ будет автоматически вызывать его каждый раз, когда создается объект. Следующая программа CONSTRUC.CPP создает класс с именем employee. Программа также определяет конструктор с именем employee который присваивает начальные значения объекту. Однако конструктор не возвращает никакого значения, несмотря на то, что он не объявляется как void. Вместо этого просто не указывается тип возвращаемого значения:
class employee
{
public:
employee(char *, long, float); //Конструктор
void show_employee(void);
int change_salary(float);
long get_id(void);
private:
char name [64];
long employee_id;
float salary;
};
В программе просто определяется конструктор так же, как любой другой метод класса:
employee::employee(char *name, long employee_id, float salary)
{
strcpy(employee::name, name) ;
employee::employee_id = employee_id;
if (salary < 50000.0)
employee::salary = salary;
else // Недопустимый оклад
employee::salary = 0.0;
}
Конструктор не возвращает значение вызвавшей функции. Для него также не используется тип void. В данном случае конструктор использует оператор глобального разрешения и имя класса перед именем каждого элемента. Ниже приведена реализация программы CONSTRUC.CPP:
#include <iostream.h>
#include <string.h>
class employee
{
public:
employee(char *, long, float);
void show_employee(void);
int change_salary(float) ;
long get_id(void);
private:
char name [64] ;
long employee_id;
float salary;
};
employee::employee(char *name, long employee_id, float salary)
{
strcpy(employee::name, name) ;
employee::employee_id = employee_id;
if (salary < 50000.0)
employee::salary = salary;
else // Недопустимый оклад
employee::salary = 0.0;
}
void employee::show_employee(void)
{
cout << "Служащий: " << name << endl;
cout << "Номер служащего: " << employee_id
<< endl;
cout << "Оклад: " << salary << endl;
}
void main(void)
{
employee worker("Happy Jamsa", 101, 10101.0);
worker.show_employee();
}
Если программе потребуется создать несколько объектов employee, нужно инициализировать элементы каждого из них с помощью конструктора, как показано ниже:
employee worker("Happy Jamsa", 101, 10101.0);
employee secretary("John Doe", 57, 20000.0);
employee manager("Jane Doe", 1022, 30000.0);
- Представление о конструкторе
Конструктор
представляет собой специальную
функцию, которую C++ автоматически вызывает
каждый раз при создании объекта.
Обычное назначение конструктора заключается
в инициализации элементов
class_name object(valuel, value2, value3)
- Конструкторы и параметры по умолчанию
C++
позволяет указывать значения
по умолчанию для параметров
функции. Если пользователь не
указывает каких-либо
employee::employee(char *name, long employee_id, float salary = 10000.00)
{
strcpy(employee::name, name);
employee::employee_id = employee_id;
if (salary < 50000.0)
employee::salary = salary;
else // Недопустимый оклад
employee::salary = 0.0;
}
- Перегрузка конструкторов
C++
позволяет программам
employee::employee(char *name, long employee_id)
{
strcpy(employee::name,
name);
employee::employee_id = employee_id;
do
{
cout << "Введите оклад для " <<
name << " меньше $50000: ";
cin >> employee::salary;
}
while (salary >= 50000.0);
}
Внутри определения класса программа должна указать прототипы для обоих конструкторов, как показано ниже:
class employee
{
public:
employee (char *, long, float);|___ Прототипы перегруженных
employee(char *, long); |функций
void show_employee(void);
int change_salary(float);
long get_id(void);
private:
char name [64];
long employee_id;
float salary;
}
Ниже приведена реализация программы CONSOVER.CPP:
#include <iostream.h>
#include <string.h>
class employee
{
public:
employee(char *, long, float);
employee(char *, long);
void show_employee(void);
int change_salary(float) ;
long get_id(void);
private:
char name [64];
long employee_id;
float salary;
};
employee::employee(char *name, long employee_id, float salary)
{
strcpy(employee::name, name);
employee::employee_id = employee_id;
if (salary < 50000.0) employee::salary = salary;
else // Недопустимый оклад
employee::salary = 0.0;
}
employee::employee(char *name, long employee_id)
{
strcpy(employee::name, name);
employee::employee_id = employee_id;
do
{
cout << "Введите оклад для " <<
name << " меньше $50000: ";
cin >> employee::salary;
}
while (salary >= 50000.0);
}
void employee::show_employee(void)
{
cout << "Служащий: " << name << endl;
cout << "Номер служащего: " << employee_id
<< endl;
cout << "Оклад: " << salary << endl;
}
void main(void)
{
employee worker("Happy Jamsa", 101, 10101.0);
employee manager("Jane Doe", 102);
worker.show_employee();
manager.sbow_employee();
}
Если
откомпилировать и запустить
эту программу, на экране появится запрос
ввести оклад для Jane Doe. Когда введется
оклад, программа отобразит информацию
об обоих служащих.
- Деструкторы в C++
- Представление о деструкторе
Деструктор
автоматически запускается
Каждая из созданных до сих пор программ создавала объекты в самом начале своего выполнения, просто объявляя их. При завершении программ C++ уничтожал объекты. Если определяется деструктор внутри своей программы, C++ будет автоматически вызывать деструктор для каждого объекта, когда программа завершается (т.е. когда объекты уничтожаются). Подобно конструктору, деструктор имеет такое же имя, как и класс объекта. Однако в случае деструктора предваряется его имя символом тильды (~), как показано ниже:
~class_name (void) //----------->указывает деструктор
{
// Операторы деструктора
}
В
отличие от конструктора нельзя передавать
параметры деструктору.
void employee::-employee(void)
{
cout << "Уничтожение объекта для "
<< name << endl;
}
В данном случае деструктор просто выводит на экран сообщение о том, что C++ уничтожает объект. Когда программа завершается, C++ автоматически вызывает деструктор для каждого объекта. Ниже приведена реализация программы DESTRUCT.CPP:
#include <iostream.h>
#include <string.h>
class employee
{
public:
employee(char *, long, float);
~employee(void);
void show_employee(void);
int change_salary(float);
long get_id(void);
private:
char name [64] ;
long employee_id;
float salary;
};
employee::employee(char *name, long employee_id, float salary)
{
strcpy(employee::name, name) ;
employee::employee_id = employee_id;
if (salary < 50000.0) employee::salary = salary;
else // Недопустимый оклад
employee::salary в 0.0;
}
void employee::-employee(void)
{
cout << "Уничтожение объекта для "
<< name << endl;
}
void employee::show_employee(void)
{
cout << "Служащий: " << name << endl;
cout << "Номер служащего: " << employee_id
<< endl;
cout << "Оклад: " << salary << endl;
}
void main(void)
{
employee worker("Happy Jamsa", 101, 10101.0);
worker.show_employee();
}
Если откомпилировать и запустить эту программу, на экране появится следующий вывод:
С:\> DESTRUCT <ENTER>
Служащий: Happy Jamsa
Номер служащего: 101
Оклад: 10101
Уничтожение объекта для Happy Jamsa
Программа
автоматически вызывает деструктор,
без какого-либо явного вызова функции
деструктора.
- Деструкторы
Деструктор
представляет собой функцию, которую
C++ автоматически запускает, когда
он или программа уничтожает объект.
Деструктор имеет такое же имя, как
и класс объекта; однако предваряется
имя деструктора символом тильды
(~), например ~employee. В программе определяется
деструктор точно так же, как и любой другой
метод класса.
Заключение
Конструкторы
и деструкторы представляют собой
специальные функции класса, которые
программа автоматически
- Практическая часть
Условие задачи:
Написать программу, которая выводит на
экран изображение работающего светофора.
Рекомендуемый вид светофора и алгоритм
его работы приведены ниже:
| мигающий зеленый |
Программа на С++
// Светофор
#include <stdio.h>
# include <graphics.h>
include <conio.h>
#include <dos.h>
ttdefine PATHTODRIVER "c:\\borlandc\\bgi\\"
// рисует круг заданного
цвета
void krug(int x,int у, int r,
int fc, int be)
(
// x, у, г - координаты
центра и радиус // fc, be - цвет круга и окантовки
setfillstyle(SOLID_FILL,fc, 205);
piesIice (х, у, 0, 360, г);
setcolor(be);
circle(х,у,г);
void main(void)
{
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(Sgdriver, Sgrnode, PATHTODRIVER);
errorcode = graphresult();
if (errorcode != grOk) // ошибка
инициализации
// графического режима
' {
printf("Ошибка: %d\n",
errorcode);
puts("Для завершения
программы нажмите <Enter>")
getch();
outtextxy(10,10,"Соблюдайте
правила уличного движения!")
rectangle (88,88,112,152);
// Горит красный свет
krug(100,100,10,RED,WHITE);
krug(100, 120, 10, LIGHTGRAY, WHITE)
;
krug(100, 140, 10, LIGHTGRAY, WHITE)
;
for (int i = 1; i <= 3;i++)
// Здесь горит красный
delay(3000); // задержка
3 сек
krug(100,120,10,YELLOW,WHITE);
// Включить желтый
delay(1000);
krug(100,100,10,LIGHTGRAY,
krugd(100, 120,10, LIGHTGRAY,WHITE)
; // Выключить желтый
krugd(100, 140,10,GREEN,WHITE)
; // Включить зеленый
delay(2000);
// Мигающий зеленый
сигнал
for (int j = 1; j <= 5; j++)
// мигает 5 раз
delay(500);
krug(100,140,10,GREEN,WHITE);
delay(500);
krug(100,14 0,10,LIGHTGRAY,WHITE)
krug(100,120,10,YELLOW,WHITE);
delay(1500);
krug{100,120,10,LIGHTGRAY,
krug(100,100,10,RED,WHITE);
// Включить // зеленый
;// Выключить // зеленый
// Включить // желтый
// Выключить // желтый
// Включить // красный
outtextxy(10,25,"Нажмите
<Enter>!");
getch();
closegraph(); // выход из
графического
режима
Список использованой литературы
- Буч Г. Объектно-ориентированный
анализ и проектирование с примерами приложений
на С++. - http://www.nexus.odessa.ua/
files/books/booch. - .-К.: «Диалектика», 1996. – 448 с.,ил. Намир К. Шаммас.
- М., Конкорд, 1992 г., 519 с., ил.Гради Буч.
- – М: Аст – Пресс книга: Инфорком – Пресс, 2001. – 368 с.

- Конструкции зимнего сада
- Конструкции из дерева и пластмасс
- Конструкции из дерева и пластмасс
- Конструкции из дерева и пластмасс
- Конструкции из дерева и пластмасс, производственное здание
- Конструкции металлургических печей
- Конструкции неполных предложений в художественных произведениях
- Конструктивный расчет выпарной установки
- Конструктивный расчет котла-утилзатора
- Конструкторская подготовка производства
- Конструкторская часть для определения характеристик эластичной шины
- Конструкторский расчет сушки
- Конструкторское проектирование
- Конструкторско-технологическая подготовка производства на жилет