Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
sergey_viper
9 / 3 / 1
Регистрация: 15.04.2012
Сообщений: 185
#1

Удаление объекта класса - C++

03.06.2013, 19:50. Просмотров 2183. Ответов 3
Метки нет (Все метки)

Помогите с удалением объекта класса:
C++
1
2
3
4
5
6
void badstuddel(Student spis[], int n)
    {
        for(int i=0;i<n;i++)
        if(spis[i].getpoint()<4)
          delete (* spis)[i];
    }
ВЫдаёт:
C++
1
C:\Users\Сергей\Downloads\mod7rand (2).cpp|105|error: no match for 'operator[]' in '* spis[i]'|
Если же я делаю просто:
C++
1
2
3
4
5
6
void badstuddel(Student spis[], int n)
    {
        for(int i=0;i<n;i++)
        if(spis[i].getpoint()<4)
          delete spis[i];
    }
То:
C++
1
C:\Users\Сергей\Downloads\mod7rand (2).cpp|105|error: type 'class Student' argument given to 'delete', expected pointer|
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 19:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление объекта класса (C++):

удаление объекта класса SFML - C++
проблема вот в чем. когда я удаляю объект класса программно то у меня вылетает окно SFML. #include &lt;SFML/Graphics.hpp&gt; #include &quot;map.h&quot;...

Удаление объекта класса из контейнера - C++
Подскажите пожалуйста как правильно удалить обьект. MyCarDeque.push_front(*CreateNewCar()); Так добавлял обьект в очередь. Car...

Удаление поля объекта класса - corruption of the heap - C++
в методе класса abc; for(int i=0;i&lt;5;i++) { abc temp; temp=*this;//в перегрузке присваивания выделяется память под...

Проверка создания объекта класса BBB из класса AAA и работа с ним - C++
#define @param2; // объявили для выяснения случая: нужен новый или использовать существующий. Class AAA { private: void...

Объявление объекта класса fstream в качестве статической компоненты другого класса - C++
Доброго времени суток. Есть задание, в котором говорится &quot;...Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать...

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...

3
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 2
03.06.2013, 19:51 #2
Вы удаляете обьект стека.
C++
1
2
3
4
5
6
void badstuddel(Student* spis[], int n)
{
------
delete spis[i]; //удаление обьекта, при этом Вы должны сами проследить/знать лежит ли обьект в куче или был создан на стеке.
------
}
1
sergey_viper
9 / 3 / 1
Регистрация: 15.04.2012
Сообщений: 185
03.06.2013, 21:02  [ТС] #3
Цитата Сообщение от stima Посмотреть сообщение
Вы удаляете обьект стека.
C++
1
2
3
4
5
6
void badstuddel(Student* spis[], int n)
{
------
delete spis[i]; //удаление обьекта, при этом Вы должны сами проследить/знать лежит ли обьект в куче или был создан на стеке.
------
}
Всё равно что-то не то.
Исходник:
Кликните здесь для просмотра всего текста
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <string.h>
#include <iostream>
 
using namespace std;
 
 
struct points
    {
        int Matan;
        int AGandLA;
        int English;
        int Programming;
        int Molecular;
        int AP;
    };
 
struct date
    {
        char day[3];
        char month[3];
        int year;
    };
 
class Student{
        char name[30];
        date d;
        char adr[30],fac[20] ;
        int kurs;
        points p;
    public:
        Student();
        int getkurs();
        int getpoint();
        void show();
 
};
 
Student::Student()
{
    cout<<"Input name:";
    cin>>name;
    cout<<"Input date of born:\n";
    cout<<"Day:";
    cin>>d.day;
    cout<<"Month:";
    cin>>d.month;
    cout<<"Year:";
    cin>>d.year;
    cout<<"Input adr:";
    cin>>adr;
    cout<<"Input fac:";
    cin>>fac;
    cout<<"Input kurs:";
    cin>>kurs;
    cout<<"Input E.P.:\n";
    cout<<"Mathematical analysis:";
    cin>>p.Matan;
    cout<<"AG&LA:";
    cin>>p.AGandLA;
    cout<<"Programming:";
    cin>>p.Programming;
    cout<<"English:";
    cin>>p.English;
    cout<<"Molecular physics:";
    cin>>p.Molecular;
    p.AP=(p.AGandLA+p.English+p.Matan+p.Molecular+p.Programming)/5;
 
 
 
}
void Student::show()
{
    cout<<"Name:"<<name<<endl;
    cout<<"Was born:"<<d.day<<'.'<<d.month<<'.'<<d.year<<endl;
    cout<<"Address:"<<adr<<endl;
    cout<<"Fac:"<<fac<<endl;
    cout<<"Kurs:"<<kurs<<endl;
    cout<<"E.P.:"<<endl;
    cout<<"Mathematical analysis:"<<p.Matan<<endl;
    cout<<"Programming:"<<p.Programming<<endl;
    cout<<"AG&LA:"<<p.AGandLA<<endl;
    cout<<"English:"<<p.English<<endl;
    cout<<"Molecular physics:"<<p.Molecular<<endl;
    cout<<endl<<endl<<"---------"<<endl<<endl;
}
 
int Student::getpoint() {return p.AP;}
 
int Student::getkurs() {return kurs;}
 
void badstud(Student spis[], int n)
    {
        int i,k;
        cout<<"Input the course:"; cin>>k;
        cout<<endl<<endl;
        for(i=0;i<n;i++)
        if((spis[i].getkurs()==k)&&(spis[i].getpoint()<4))
            spis[i].show();
    }
void badstuddel(Student* spis[], int n)
 
    {
        for(int i=0;i<n;i++)
        if(spis[i].getpoint()<4)
          delete spis[i];
    }
 
 
int main()
{
    Student *spis;
    int n;
    cout<<"Input a number of students:"; cin>>n;
    spis=new Student[n];
    for(int i=0;i<n;i++)
        {
        cout<<endl<<endl;
        spis[i].show();
        }
badstud(spis,n);
badstuddel(spis,n);
    for(int i=0;i<n;i++)
        {
        cout<<endl<<endl;
        spis[i].show();
        }
delete [] spis;
cout<<"Press any key!";
 
}
0
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 2
03.06.2013, 22:06 #4
это выделение и удаление массива обьектов
C++
1
2
A *a = new A[count];
delete[] a;
это выделение и удаление массива указателей на обьекты, а также выделение и удаление обьектов.
C++
1
2
3
4
5
6
7
8
9
10
11
A **a = new A*[count];
for (int i = 0; i < count; ++i)
     a[i] = new A();
 
for (int i = 0; i < count; ++i)
{
     delete a[i];
     a[i] = NULL;
}
 
delete[] a;
Вы можете использовать оба. Оба верны. Просто память управляется по разному. В чем разница?
1. В первом случае, Вы "не удаляете" обьект, а просто "помечаете" его удаленным. А также Вы можете указать место для создание нового обьекта.
C++
1
2
3
A *a = new A[count];
a[5]->~A();
new(a[5]) A;
2. Во втором случае вы удаляете обьект.
C++
1
2
3
A **a = new A*[count];
a[5] = new A;
delete a[5];
3. Как вы заметили второй случай более понятный, но требует перерасхода на память (count * sizeof(void*))

Соответственно Ваши 2 функции должны использовать один из предложенных методов.
1
03.06.2013, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 22:06
Привет! Вот еще темы с ответами:

Использование объекта одного класса при создании нового класса - C++
Добрый вечер. У меня такая проблема. Есть готовый класс L2 - список, на его основе нужно создать дек. Я поступил так: в приватной части...

Указатель на объект базового класса и адрес объекта производного класса - C++
Пример кода: class Class1 { public: Class1(int x) { j = new int; *j = x; } ~Class1() {delete j;}

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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