 
        
        
Лабораторная работа №2
«Конструкторы и деструкторы»
Выполнил: Янковский Д.В.
гр. ПО-41
Коломна, 2011 г.
Исправления ошибок текста программы
- 
- исправление синтаксических ошибок в тексте; 
- 
- добавлен вывод на экран всех выполняемых функций: сложение, вычитание, деление, умножение; 
- 
- отсутствие заголовочного файла- locale.h-для изменения языка на русский язык; 
- 
- отсутствие заголовочного файла- conio.h, объявляющего библиотечные функции для работы с «консольным вводом и выводом» программы; 
- 
-добавление директивы using namespace std, для использования краткого обращения к функции cout и cin; 
.
Текст программы:
/* Constructors & */
/* Destructors of * /
/* class, Conplex */
/******************/
/* v. 25. 10.2010 */
#include <iostream> // для cin, сout
#include <process.h> // для exit()
#include <locale.h>
#include <conio.h>
using namespace std;
class Complex {
float Re; // Действительная и
float Im; // мнимая части числа
public:
Complex ();
Complex ( int, int );
~Complex ();
// функции
// арифметики
float Real (Complex);
void Sum ( Complex, Complex ); // Функции
void Minus ( Complex, Complex ); // арифметики
void Mult ( Complex, Complex ); //
void Div ( Complex, Complex ); //
void Get (); // Функции ввода
void Put (); // Функция ввода
};
void Complex:: Sum ( Complex x, Complex y ) // Сумма чисел
{
Re = x.Re + y.Re;
Im = x.Im + y.Im;
}
void Complex:: Minus ( Complex x, Complex y ) // Разность
{
Re = x.Re - y.Re;
Im = x.Im - y.Im;
}
void Complex:: Mult ( Complex x, Complex y ) //Произведение
{
Re = x. Re * y. Re - x.Im * y.Im;
Im = x.Re * y.Im + x.Im * y.Re;
}
void Complex:: Div ( Complex x, Complex y ) // Деление
{
if (!(y.Re || y.Im ))
{
cout << "Деление на ноль!";
exit (12);
}
Re = (x.Re * y.Re - x.Im * y.Im)/(y.Re*y.Re+y.Im*y.Im);
Im = (x.Im * y.Re - x.Re * y.Im)/(y.Re*y.Re+y.Im*y.Im);
}
void Complex:: Get ( ) // Ввод с клавиатуры
{
cout <<"Введите действительную часть числа:";
cin >> Re;
cout <<"Введите мнимую часть числа: ";
cin >> Im;
}
float Complex:: Real ( ) { // Вывод на экран <
return(Re);
}
void Complex:: Put ( ) { // Вывод на экран <
cout << "Действительная часть числа: " << Re;
cout << "\nМнимая часть числа: " << Im<<endl;
}
Complex::Complex(int R, int i) {
Re = R; Im = i;
}
Complex::Complex ()
{
Re = Im = 0;
}
Complex::~Complex (){
Re= Im = 0;
}
void main() {
setlocale(LC_ALL,"Russian");
Complex a,b; // Определение объектов a,b
a.Get();
b.Get(); // Ввод чисел с клавиатуры
Complex c(12,24); // Определение объекта c
cout <<endl;
a.Put(),b.Put(),c.Put ();// Вывод на экран
c.Sum ( a, b ); // Сумма а и b помещется в c
cout <<"\nСумма действительных чисел:\n";
cout <<c.Real ();
c.Minus(a, b);
cout <<"\nРазность действительных чисел:\n";
cout <<c.Real ();// Вывод результата на экран
c.Div(a, b);
cout <<"\nДеление действительных чисел:\n";
cout <<c.Real ();
c.Mult(a, b);
cout <<"\nУмножение действительных чисел:\n";
cout <<c.Real ();
system("pause");
}
Контрольные вопросы:
- 
Для чего предназначены конструкторы классов? 
Конструктор позволяет выполнить инициализацию объекта класса в момент его создания.
- 
Для чего предназначены деструкторы классов? 
Деструктор освобождает ресурсы, использованные данным объектом.
- 
Как используется оператор New в конструкторах классов для отведения динамически распределяемой оперативной памяти под объекты классов Си++? 
Заказа и освобождения динамически распределяемой оперативной памяти, соответственно new и delete.
- 
Как описываются конструкторы и деструкторы классов? 
Символ «~» перед именем класса
- 
Какие ограничения существуют при определении конструкторов и деструкторов? 
Ограничением использования конструкторов является запрет использования его имени в качестве явного аргумента внутри самого этого класса
- 
Что такое ссылки, чем они отличаются от указателей на объекты и самих объектов? 
объект - экземпляр типа класс (тип данных)
- 
Как можно использовать ссылки в качестве параметров функций? 
При передаче по ссылке в функцию передаются адрес, указанный при вызове параметра, а внутри функции любого обращения к параметрам явно разименовываются.
- 
Порядок работы программы, содержащей классы с конструкторами и деструкторами? 
Конструкторы глобальных объектов вызывается до вызова функции main. Локальные объекты создаются когдастановится активной область их действий.
- 
Что такое время жизни объекта в области видимости? 
Время жизни – это интервал времени выполнения программы, в течение которого программный объект (переменная или функция) существует, что определяется фактом выделения памяти. Время жизни переменной может быть локальным или глобальным.
- 
Каковы способы копирования объектов Си++ при использовании ссылок и при описании классов? 
Конструктор копирования вызывается в тех случаях, когда новый объект создается путем существующего, а именно:
- 
при описании нового объекта с инициализацией другого объекта. 
- 
при передаче объектов в функцию по значению. 
- 
при возврате объекта из функции. 
- 
Как инициализируются объекты классов, использующих конструкторы и деструкторы? 
При создании каждого объекта выделяется память достаточная для хранения всех его полей и автоматически объявляется конструкторы выполнения их инициализацию
- 
Что такое инициализация объектов класса по умолчанию? Привести соответствующие примеры инициализации. 
Конструктор, вызванный без параметров называется конструктор по умолчанию.
