Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
![](images/emoji__ok.png)
Предоплата всего
![](images/emoji__signature.png)
Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Деструктор является дополнением конструктора. Он имеет то же имя, что и класс, но с префиксом - тильдой (~). Он вызывается всякий раз, когда уничтожается представитель класса. Объект считается уничтоженным, когда завершил работу деструктор объекта. Для деструктора существуют следующие правила:
Пример 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>
#include “ctime.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, 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