Сайт студентов математиков для студентов математиков!
Главная Решение задач по математике Классы. конструкторы и деструкторы.

Классы. конструкторы и деструкторы.

Отчёт

по лабораторной работе №1

«КЛАССЫ. КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ.
КОНСТРУКТОРЫ КОПИРОВАНИЯ»

1.  Цель работы.

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

2.  Вариант задания.

Необходимо для заданного по варианту динамического типа данных описать класс, содержащий указатель на динамический тип как поле данных. Для этого класса описать конструкторы (в том числе и конструктор копирования), деструктор, функцию печати данных. Создать экземпляр полученного класса и проиллюстрировать его корректную работу: распечатать данные, изменить данные и распечатать вновь. Создать второй экземпляр класса как копию первого и проиллюстрировать корректную работу конструктора копирования: распечатать и изменить данные объекта-копии, распечатать данные обоих объектов, сравнить результат. Предусмотреть ошибки.

Вариант №13.

Динамическая структура — двумерный массив, квадратная матрица. Тип данных — целочисленный. Предусмотреть функции заполнения массива случайными числами и поиска максимального и минимального элементов массива.

3.  Текст программы

#pragma once

class Matrix

{

private:

int **a;

public:

Matrix(int n);

~Matrix();

void FillMatrix();

void MaxEl();

void MinEl();

int menu();

}

#include "Header. h"

#include "stdafx. h"

#include <iostream>

using namespace std;

Matrix::Matrix(int N)

{

a = new int*[N];

for (int i = 0; i < N; i++){

a[i] = new int[N];

}

}

Matrix::~Matrix()

{

delete[]a;

}

void Matrix::FillMatrix()

{

for (int i = 0; i < n; i++)

for (int j = 0; j < n; j++)

a[i][j] = rand() % 100;

}

void Matrix::MaxEl()

{

int max = 0;

max = a[0][0];

for (int i = 0; i < n; i++)

for (int j = 0; j < n; j++)

if (a[i][j] > max) max = a[i][j];

cout << "max = " << max << endl;

}

void Matrix::MinEl()

{

int min = 0;

min = a[0][0];

for (int i = 0; i < n; i++)

for (int j = 0; j < n; j++)

if (a[i][j] < min) min = a[i][j];

cout << "min = " << min << endl;

}

int Matrix::menu()

{

char buf[10];

int item;

do {

cout << endl;

cout << "1- Fill Matrix With Random Elements" << endl;

cout << "2- Find and Display Maximum Element" << endl;

cout << "3- Find and Display Minimum Element" << endl;

cout << "4- Exit" << endl;

cout << "====================================" << endl;

cout << "Enter the number of menu option" << endl;

cin >> buf;

cin. get();

item = atoi(buf);

if (!item) {

cout << "You must enter number from 1 to 4" << endl;

cin. get();

}

} while (!item);

return item;

}

#include "stdafx. h"

#include "Header. h"

#include <fstream>

#include <stdlib. h>

#include <string. h>

#include <iostream>

using namespace std;

int main(intargc, _TCHAR* argv[])

{

Matrix object1;

object1.FillMatrix();

object1.MaxEl();

object1.MinEl();

while (1) {

switch (object1.menu()){

case 1:object1.FillMatrix(); break;

case 2:object1.MaxEl(); break;

case 3:object1.MinEl(); break;

case 4: return 0;

default:

cout << "You must enter number from 1 to 4" << endl;

cin. get();

break;

}

}

return 0;

}

Выводы

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

Для заданного по варианту динамического типа данных (по варианту – стек) описан класс, содержащий указатель на него как поле данных. Для этого класса описаны конструкторы (в том числе и конструктор копирования), деструктор, функция печати данных. Создан экземпляр полученного класса и проиллюстрирована его корректная работа. Создан второй экземпляр класса как копия, проиллюстрирована корректная работа конструктора копирования. Результаты работы совпали. Программа работает корректно, с учётом желаний пользователя и дружественным интерфейсом.