Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
#1

Деструктор (программа, которая ищет минимальный элемент массива) - C++

24.12.2012, 16:07. Просмотров 720. Ответов 15
Метки нет (Все метки)

Вот написал простенькую программу, которая ищет минимальный элемент массива! С конструктором более менее разобрался, а с деструктором что-то не получается! Что в данном случае нужно написать чтобы разрушить объект?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream.h>
#include <conio.h>
 
const int n=10;
 
class Class{
      int num[n];
      
public:
       void cou_t();
       void min();
       Class();
       //~Class();
       };
Class::Class(){
       for(int i=0;i<n;i++)
        num[i]=rand()%10+1;
        }
void Class::cou_t()
{
     for(int i=0;i<n;i++)
        cout<<num[i]<<" ";
 }
void Class::min()
{
     int m=num[0];
     for(int i=0;i<n;i++)
        if(num[i]<m) m=num[i];
     cout<<"\nMin element is "<<m;
 }
int main()
{
    srand(time(0));
    Class obj;
    obj.cou_t();
    obj.min();
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2012, 16:07     Деструктор (программа, которая ищет минимальный элемент массива)
Посмотрите здесь:

C++ В одномерном массиве, состоящем из n элементов массива, вычислить минимальный элемент массива
Написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел C++
C++ программа, которая бы вычисляла среднее значение, максимальный и минимальный элемент второй колонки Excel и выводила это значение на экран
C++ Не работает программа которая находит минимальный элемент в одномерном массиве из 10 элементов, заполненном случайными числами от 1 до 30
Не найду ошибку (функция, которая ищет максимальный элемент, который встречается больше 1 раза) C++
C++ Программа вычисляет минимальный по модулю элемент массива
Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
24.12.2012, 16:32     Деструктор (программа, которая ищет минимальный элемент массива) #2
tokar2, зачем в вашем классе деструктор, если у вас массив не динамический?
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 542
24.12.2012, 16:33     Деструктор (программа, которая ищет минимальный элемент массива) #3
деструктор не обязателен.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.12.2012, 16:34     Деструктор (программа, которая ищет минимальный элемент массива) #4
Ничего (серьёзно).
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
24.12.2012, 16:39  [ТС]     Деструктор (программа, которая ищет минимальный элемент массива) #5
Помогите переделать мне эту программу чтобы в ней использовался деструктор! Я только начал учить классы и еще не до конца понимаю зачем он и какие операторы в нем можно записывать.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 542
24.12.2012, 16:44     Деструктор (программа, которая ищет минимальный элемент массива) #6
C++
1
2
3
4
5
6
int *num = new int[n];
 
~Class()
{
    delete [] num
}
Avazart
7062 / 5239 / 261
Регистрация: 10.12.2010
Сообщений: 23,037
Записей в блоге: 17
24.12.2012, 16:45     Деструктор (программа, которая ищет минимальный элемент массива) #7
Цитата Сообщение от tokar2 Посмотреть сообщение
то в данном случае нужно написать чтобы разрушить объект?
Ничего ...
C++
1
Class::~Class(){ /* пусто*/ };
Но в данном случае можно его не писать(он создается по умолчанию), разве что только для того что бы сделать его виртуальным для дальнейшего наследования
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
24.12.2012, 16:50  [ТС]     Деструктор (программа, которая ищет минимальный элемент массива) #8
Почему такая ошибка?
`new' cannot appear in a constant-expression
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream.h>
#include <conio.h>
 
const int n=10;
 
class Class{
      int* num=new int[n];
      
public:
       void cou_t();
       void min();
       Class();
       ~Class();
       };
Class::Class(){
       for(int i=0;i<n;i++)
        num[i]=rand()%10+1;
        }
void Class::cou_t()
{
     for(int i=0;i<n;i++)
        cout<<num[i]<<" ";
 }
void Class::min()
{
     int m=num[0];
     for(int i=0;i<n;i++)
        if(num[i]<m) m=num[i];
     cout<<"\nMin element is "<<m;
 }
Class::~Class(){
       delete [] num;
        }
int main()
{
    srand(time(0));
    Class obj;
    obj.cou_t();
    obj.min();
    getch();
    return 0;
}
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 542
24.12.2012, 16:53     Деструктор (программа, которая ищет минимальный элемент массива) #9
засунь присвоение в конструктор.
C++
1
2
3
4
5
6
Class::Class()
{
       num = new int[n];
       for(int i=0;i<n;i++)
        num[i]=rand()%10+1;
        }
zss
Модератор
Эксперт С++
6242 / 5845 / 1891
Регистрация: 18.12.2011
Сообщений: 14,972
Завершенные тесты: 1
24.12.2012, 17:00     Деструктор (программа, которая ищет минимальный элемент массива) #10
Уж коли начали создавать класс, то какого ... n объявлена глобально.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream.h>
#include <conio.h>
class Class
{
private:
      int n;
      int* num;
      
public:
       void cou_t();
       void min();
       Class(int size);
       ~Class();
       };
Class::Class(int size=0)
{
       n=size;
       num=new int[n];
       for(int i=0;i<n;i++)
        num[i]=rand()%10+1;
}
void Class::cou_t()
{
     for(int i=0;i<n;i++)
        cout<<num[i]<<" ";
 }
void Class::min()
{
     int m=num[0];
     for(int i=0;i<n;i++)
        if(num[i]<m) m=num[i];
     cout<<"\nMin element is "<<m;
 }
Class::~Class(){
       delete [] num;
        }
int main()
{
    srand(time(0));
    int m;
    cout<< "enter array size:";
    cin>>m;
    Class obj(m);;
    obj.cou_t();
    obj.min();
    getch();
    return 0;
}
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
24.12.2012, 17:09  [ТС]     Деструктор (программа, которая ищет минимальный элемент массива) #11
Вы бы не могли объяснить как здесь определяется размер массива! Ну то что пользователь вводит я понял, а что дальше? Передается в конструктор и присваивается 0, и я что-то этого не понимаю ..
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 542
24.12.2012, 17:13     Деструктор (программа, которая ищет минимальный элемент массива) #12
Почему ноль присваивается? Присваивается переданное как аргумент значение. а вот если аргумент не передан, то присваивается ноль. Дальше формируется массив.

Добавлено через 1 минуту
При
C++
1
2
3
4
5
6
7
Class::Class(int size=0)
{
       n=size;
       num=new int[n];
       for(int i=0;i<n;i++)
        num[i]=rand()%10+1;
}
в main можно вызывать как так:
C++
1
Class arr; // при этом размер будет равен нулю.
Так и
C++
1
Class arr(10); // а тут размер будет равен переданному числу, т.е. десяти
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.12.2012, 07:43     Деструктор (программа, которая ищет минимальный элемент массива) #13
Цитата Сообщение от tokar2 Посмотреть сообщение
Что в данном случае нужно написать чтобы разрушить объект?
Деструктор, строго говоря, не разрушает сам объект. Он только вызывается перед реальным разрушением и освобождает ресурсы, захваченные объектом, чтобы ничего не "утекло". Если освобождать нечего - соответственно и деструктор писать не надо. Если вы его не напишете, компилятор сгенерирует его автоматически, и он не будет выполнять никакой работы (будет иметь пустое тело) и нужен будет только затем, чтобы компилятору было что вызвать перед разрушением объекта.
Croessmah
29.12.2012, 20:26
  #14

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Если освобождать нечего - соответственно и деструктор писать не надо.
А если есть счетчик объектов?

silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.12.2012, 21:46     Деструктор (программа, которая ищет минимальный элемент массива) #15
Croessmah, "ресурс" - понятие абстрактное. "Освободить ресурс" - произвести некую финализацию. А под понятие "финализация" подпадают любые действия, которые должны быть выполнены при разрушении объекта.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2012, 16:38     Деструктор (программа, которая ищет минимальный элемент массива)
Еще ссылки по теме:

Программа которая ищет самое короткое слово C++
функция, которая определяет минимальный элемент массива C++
Написать функцию, которая находит минимальный элемент одномерного массива C++
Написать программу, содержащую функцию, которая возвращает минимальный элемент переданного ей массива C++
Напишите программу, которая ищет элемент массива и выводит на экран его номер C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.12.2012, 16:38     Деструктор (программа, которая ищет минимальный элемент массива) #16
Цитата Сообщение от tokar2 Посмотреть сообщение
class Class{
* * * int num[n];
public:
* * * *void cou_t();
* * * *void min();
* * * *Class();
* * * *//~Class();
* * * *};
В классе без динамических членов, без указателей на агрегат, без указателей, реализующих класс и тому подобного деструктор должен быть пустым, то есть просто заголовок и фигурные скобки и больше ничего, такой деструктор может быть неявным, а за физическое удаление самого объекта в любом случае отвечает неявный код.
Yandex
Объявления
30.12.2012, 16:38     Деструктор (программа, которая ищет минимальный элемент массива)
Ответ Создать тему
Опции темы

Текущее время: 03:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru