Скачиваний:
28
Добавлен:
20.06.2014
Размер:
46.08 Кб
Скачать

Лабораторная работа №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");

}

Контрольные вопросы:

  1. Для чего предназначены конструкторы классов?

Конструктор позволяет выполнить инициализацию объекта класса в момент его создания.

  1. Для чего предназначены деструкторы классов?

Деструктор освобождает ресурсы, использованные данным объектом.

  1. Как используется оператор New в конструкторах классов для отведения динамически распределяемой оперативной памяти под объекты классов Си++?

Заказа и освобождения динамически распределяемой оперативной памяти, соответственно new и delete.

  1. Как описываются конструкторы и деструкторы классов?

Символ «~» перед именем класса

  1. Какие ограничения существуют при определении конструкторов и деструкторов?

Ограничением использования конструкторов является запрет использования его имени в качестве явного аргумента внутри самого этого класса

  1. Что такое ссылки, чем они отличаются от указателей на объекты и самих объектов?

объект - экземпляр типа класс (тип данных)

  1. Как можно использовать ссылки в качестве параметров функций?

При передаче по ссылке в функцию передаются адрес, указанный при вызове параметра, а внутри функции любого обращения к параметрам явно разименовываются.

  1. Порядок работы программы, содержащей классы с конструкторами и деструкторами?

Конструкторы глобальных объектов вызывается до вызова функции main. Локальные объекты создаются когдастановится активной область их действий.

  1. Что такое время жизни объекта в области видимости?

Время жизни – это интервал времени выполнения программы, в течение которого программный объект (переменная или функция) существует, что определяется фактом выделения памяти. Время жизни переменной может быть локальным или глобальным.

  1. Каковы способы копирования объектов Си++ при использовании ссылок и при описании классов?

Конструктор копирования вызывается в тех случаях, когда новый объект создается путем существующего, а именно:

  1. при описании нового объекта с инициализацией другого объекта.

  2. при передаче объектов в функцию по значению.

  3. при возврате объекта из функции.

  1. Как инициализируются объекты классов, использующих конструкторы и деструкторы?

При создании каждого объекта выделяется память достаточная для хранения всех его полей и автоматически объявляется конструкторы выполнения их инициализацию

  1. Что такое инициализация объектов класса по умолчанию? Привести соответствующие примеры инициализации.

Конструктор, вызванный без параметров называется конструктор по умолчанию.

Соседние файлы в папке Отчеты