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