Загрузка данных


Лабораторная работа №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.	Задание.
Преобразовать задание из предыдущей лабораторной работы: в созданную ранее программу добавит конструктор, при объявлении которого,  произвести инициализацию именем файла, в который должны записаться данные. Количество записываемых студентов должно определяться в программе