Загрузка данных
Лабораторная работа №16
Задание начальных условий в программе (конструктор и деструктор)
1. Цель: научиться задавать начальные условия для классов.
2. Основные теоретические сведения.
Конструктор класса – это специальная функция класса, которая вызывается при создании нового объекта этого класса. Она предоставляет возможность инициализировать объекты во время их создания и гарантировать, что все поля будут иметь корректные значения.
Конструктор класса всегда именуется по имени класса, в котором он определен. Конструктор не имеет типа возврата. Основное назначение конструктора класса – присваивать начальные значения элементам данных класса.
Пример 1. Вычисление объема ящика, с использованием конструктора.
#include <iostream>
using namespace std;
class CBox
{
public:
double m_Lenth;
double m_Width;
double m_Higth;
// Определяем конструктор
CBox( double lv, double lw, double lh)
{
cout << "\nВызван конструктор" ;
m_Lenth = lv;
m_Width = lw;
m_Higth = lh;
}
// Функция для вычисления объема ящика
double Volume()
{
return (m_Lenth * m_Width * m_Higth);
}
};
void main ()
{
setlocale(0, "Rus");
CBox box1(78.0, 24.0, 18.0); // Объявление и инициализация box1
CBox cigarBox(8.0, 5.0, 1.0); // Объявление и инициализация cigarBox
double boxVolume = 0.0; // Сохранить объем ящика
boxVolume = box1.Volume(); // Вычислим объем box1
cout << endl << "Объем box1 = " << boxVolume;
cout << endl << "Объем box1 = " << cigarBox.Volume();
cout << endl;
}
Описание полученных результатов.
Конструктор CBox() принимает три параметра типа double, соответствующих начальным значениям полей m_Lenth И m_Width = lw И m_Higt объекта CBox(). Первый оператор конструктора выводит сообщение, что бы было видно, когда он был вызван. Код в теле конструктора очень прост. Он просо присваивает аргументы, которые переданы конструктору, соответствующим полям.
Внутри функции main() вы объявляете объект box1 с инициализирующими значениями последовательно для полей m_Lenth и m_Width = lw и m_Higt. Они указаны в скобках, следующих за именем объекта. Вы также объявляете второй объект CBox() по имени cigarBox, который имеет инициализирующие значения.
Объем box1вычисляется с применение функции Volume(), после чего отображается на экране. Точно так же отображается значение объема cigarBox. Вывод на экране будет следующим:
Конструктор по умолчанию
Конструктор по умолчанию так же называют конструктором без аргументов, поскольку при вызове никаких аргументов не требуется.
Пример 2. Использование конструктора по умолчанию.
#include <iostream>
using namespace std;
class CBox
{
public:
double m_Lenth;
double m_Width;
double m_Higth;
// Определяем конструктор
CBox( double lv, double lw, double lh)
{
cout << "\nВызван конструктор" ;
m_Lenth = lv;
m_Width = lw;
m_Higth = lh;
}
// Определим конструктор по умолчанию
CBox()
{
cout << "\nВызван конструктор по умолчанию" << endl;
}
// Функция для вычисления объема ящика
double Volume()
{
return (m_Lenth * m_Width * m_Higth);
}
};
void main ()
{
setlocale(0, "Rus");
CBox box1(78.0, 24.0, 18.0); // Объявление и инициализация box1
CBox box2; // Объявление и никаких инициализирующих значений
double boxVolume = 0.0; // Сохранить объем ящика
boxVolume = box1.Volume(); // Вычислим объем box1
cout << endl << "Объем box1 = " << boxVolume;
box2.m_Higth = box1.m_Higth - 10;
box2.m_Lenth = box1.m_Lenth/2;
box2.m_Width = 0.25*box1.m_Width;
cout << endl << "Объем box2 = " << box2.Volume();
cout << endl;
}
Описание полученных результатов.
Все что делает конструктор по умолчанию – это отображает сообщение. Очевидно что он вызывается в точке объявления объекта box2. Вы так же получаете корректное значение объема.
Присваивание параметров в классе значений по умолчанию
Если вы поместите определение функции внутри внутрь определения класса, то можете указать значение ее параметров по умолчанию в заголовке функции.
Пример 3. Использование значений параметров по умолчанию.
#include <iostream>
using namespace std;
class CBox
{
public:
double m_Lenth;
double m_Width;
double m_Higth;
// Определяем конструктор
CBox( double lv = 1, double lw = 1, double lh = 1)
{
cout << "\nВызван конструктор" ;
m_Lenth = lv;
m_Width = lw;
m_Higth = lh;
}
// Функция для вычисления объема ящика
double Volume()
{
return (m_Lenth * m_Width * m_Higth);
}
};
void main ()
{
setlocale(0, "Rus");
CBox box1; // Объявление и инициализация box1
double boxVolume = 0.0; // Сохранить объем ящика
boxVolume = box1.Volume(); // Вычислим объем box1
cout << endl << "Объем box1 = " << boxVolume;
cout << endl;
}
Описание полученных результатов.
Вы объявили одну не инициализированную переменную класса СBox по имени box1.
3. Задание.
Преобразовать задание из предыдущей лабораторной работы: в созданную ранее программу добавит конструктор, при объявлении которого, произвести инициализацию именем файла, в который должны записаться данные. Количество записываемых студентов должно определяться в программе