У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа ’14 Программирование на языке Сс использованием классов.html

Работа добавлена на сайт samzan.net: 2016-01-17

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 19.5.2025

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

  •  деструктор не может иметь аргументов;
  •  деструктор не может возвращать значения;
  •  деструктор не наследуется (исключением является виртуальный деструктор);
  •  для одного класса может существовать только один деструктор;
  •  если деструктор не задан явным образом, то автоматически создаётся пустой деструктор.

Пример 14.6.

//file ctime.h

#ifndef __CTIME_H__

#define __CTIME_H__

class CTime

{ char *timestr;

public:

CTime(char *str=”00:00:00”);  //конструктор по умолчанию

 CTime(const CTime& clk);  //копирующий конструктор

~CTime();    //деструктор

 show();    //функция-элемент

}; //обязательно ставить точку с запятой, т.к. class

// объявление типа

#endif

//file ctime.cpp

#include <string>

#include <iostream>

#includectime.h

using namespace std;

CTime:: CTime(char *str=”00:00:00”)

{ timestr=new char[strlen(str)+1];

strcpy(timestr,str);

}

CTime:: CTime(const time& clk)

{ timestr=new char[strlen(clk.timestr)+1];

strcpy(timestr,clk.timestr);

}

CTime::~ CTime()

{ delete [] timestr;

}

CTime::show()

{ cout<<”Time is “<<timestr<<endl;

}

//file main.cpp

#include “ctime.h”

void main(void)

{ CTime a; //для а вызывается конструктор по умолчанию

 CTime *b=new CTime; //для b вызывается конструктор по

// умолчанию

CTime e(a); //для e вызывается копирующий конструктор

//вызовем функцию-элемент

a.show(); //00:00:00

 b->show(); //00:00:00

 e.show;  //00:00:00

}

//в конце области видимости автоматически вызываются деструкторы объектов в порядке, обратном вызову конструкторов, т.е. сначала для е, затем для d и т.д..

Примеры программирования

Пример 14.7. Вывод данных с использованием манипуляторов.

#include <iostream>

#include <iomanip>

#include <math.h>

using namespace std;

int main()

{ double x, y;

cout << "Input x ";

cin >> x;

y = sin(x);

cout << setprecision(3);

cout << setw(7) << x;

cout << setw(7) << y;

return 0;

}

Пример 14.8. Описать и определить класс-список.

Файл list.h содержит описание класса.

#ifndef __LIST_H__

#define __LIST_H__

struct list

{

int inf; // информационное поле

 list *next; // указатель на следующий элемент списка

};

class CSpisok

{

 list* head; // указатель на начало списка

public:

CSpisok (int);

CSpisok (CSpisok&);

void print ();

~CSpisok();

};

#endif

Файл list.cpp содержит определение функций-элементов.

#include <stdlib.h>

#include <iostream>

#include <iomanip>

#include "list.h"

using namespace std;

CSpisok:: CSpisok(int n)

//конструктор инициализирует список из n элементов по принципу

// "очередь"

{ head = NULL;

list *p,*pn;

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

{

p = new list;

p>inf = random(100)-50;

p>next = NULL;

if (head == NULL) head = p;

else pn>next = p;

pn = p;

}

}

CSpisok:: CSpisok (const CSpisok& s)

//конструктор копии класса CSpisok 

{ head = NULL;

list *sp = s.head, *p, *pn;

while (sp)

` { p = new list;

p>inf = sp>inf;

p>next = NULL;

if (head == NULL) head = p;

else pn>next = p;

pn = p;

sp = sp>next;

 }

}

CSpisok::~ CSpisok()

//деструктор - уничтожает объект класса список из памяти

{ list *p;

while (head)

{ p = head;

head = head>next;

delete p;

}

}

void CSpisok::print()

//функция-элемент печати содержимого списка

{ list *p = head;

while (p)

{ cout<<setw(5)<<p>inf;

p = p>next;

}

cout<<endl;

}

Файл main.cpp содержит основную функцию.

#include <iostream>

#include <iomanip>

#include “list.h”

using namespace std;

void main (void)

{ spisok s1(10), // создание списка из 10 элементов

 s2(s1), // s2- копия списка s1

s3(15); // создание списка из 15 элементов

s1.print(); // печать s1

s2.print(); // печать s2

s3.print(); // печать s3

}

В проект включены файлы: main.cpp и list.cpp.

Результаты выполнения программы:

-49  -50  -17  -47  -15  -29     3   -31  20  44

-49  -50  -17  -47  -15  -29     3   -31  20  44

-23    -6  -40   19      6  -46  -34    31  18  26  32  45  -29  -8  45

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

  1.  Что представляет собой класс?
  2.  Какие спецификации доступа используются при описании класса?
  3.  Что является элементами класса?
  4.  Как осуществляется доступ к элементам класса?
  5.  Для чего используется указатель this?
  6.  Что такое конструктор?
  7.  Что такое деструктор?

Варианты заданий

Номер
вариа
нта

Задание

1, 16

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки). Предусмотреть функции поиска слова в строке и добавления другой строки, начиная с позиции N

2, 17

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки). Предусмотреть функции слияния двух строк и функцию подсчёта предложений в строке.

3, 18

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой строки (объекта класса строки). Предусмотреть функции сортировки слов в строке по-алфавиту и подсчёта количества слов.

4, 19

Определить класс список элементов. В определение класса включить два конструктора: для определения списка по его размеру и путем копирования другого списка. Предусмотреть функции подсчёта количества элементов списка и добавления одного списка в другой список, начиная с позиции N.

5, 20

Определить класс список элементов. В определение класса включить два конструктора для определения списка по его размеру и путем копирования другого списка. Предусмотреть функции сортировки списка по возрастанию и вывода на экран в обратном порядке.

6, 21

Определить класс список элементов. В определение класса включить два конструктора для определения списка по его размеру и путем копирования другого списка. Предусмотреть функции инверсии списка (123->321) и поиска подсписка в списке.

7, 22

Определить класс сортированный список элементов. В определение класса включить два конструктора для определения списка по его размеру и путем копирования другого списка. Предусмотреть функции добавления элемента и слияния двух сортированных списков.

8, 23

Определить класс список элементов. В определение класса включить два конструктора для определения списка по его размеру и путем копирования другого списка. Предусмотреть функции формирования нового списка из элементов, входящих только в один из двух других списков и вычисления суммы элементов списков.

9, 24

Определить класс матрицу. В класс включить два конструктора для определения матрицы по количеству элементов и путем копирования другой матрицы. Предусмотреть функции вычисления детерминанта матрицы и умножения матрицы на число.

Номер
вариа
нта

Задание

10, 25

Определить класс стек. В класс включить два конструктора для определения стека по его размеру и путем копирования другого стека. Предусмотреть функции вычисления среднего арифметического из элементов стека и нахождения элемента по его номеру

11, 26

Определить класс вектор. В класс включить два конструктора для определения вектора по его размеру и путем копирования другого вектора. При задании вектора по его размеру предусмотреть его заполнение случайными числами. Предусмотреть функции умножения векторов и подсчёта суммы элементов вектора.

12, 27

Определить класс вектор. В класс включить два конструктора для определения вектора по его размеру и путем копирования другого вектора. При задании вектора по его размеру предусмотреть его заполнение случайными числами. Предусмотреть функции нахождения максимального и минимального из элементов вектора и умножения вектора на число.

13, 28

Определить класс вектор. В класс включить два конструктора для определения вектора по его размеру и путем копирования другого вектора. При задании вектора по его размеру предусмотреть его заполнение случайными числами. Предусмотреть функции сортировки вектора по возрастанию и нахождения среднего арифметического из элементов вектора.

14, 29

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

15, 30

Определить класс квадратная матрица. В класс включить два конструктора для определения матрицы по количеству элементов и путем копирования другой матрицы. Предусмотреть функцию поворота матрицы на 900 и функцию нахождения суммы элементов столбца с минимальным диагональным элементом.

PAGE  107




1. Концепт Dieu во французских фразеологизмах, пословицах и поговорка
2. Компактность и малый вес Создание больших передаточных чисел удобство в уприи независим распие узлов г.html
3. Лекція 12 Методи і прилади для вимірювання густини рідин і газів Питомою вагою речовини називают
4. 5 Финансовая политика Финансовая политика это определенная на продолжительный период совокупность меро
5. УПРАВЛЕНИЕ ПЕРСОНАЛОМ МЕНЕДЖМЕНТ ПЕРСОНАЛА для студентов дневной формы обучения направления подгот
6. елiксир життя щоб повернути собi молодість
7. ЧАСТНАЯ БОТАНИКА- МИКОЛОГИЯ И АЛЬГОЛОГИЯ ЭКЗАМЕН БИЛЕТ 1
8. Презентация в 3 D формате 14 июня в музее истории Бурятии им
9. тематическая константа 314; d D ~ диаметр; r ~ радиус; с отношение 2х диаметров друг к другу; s толщина
10. Книга моего деда Коркута Китаби дэдэм Коркут 1 является выдающимся памятником средневекового огузског