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

Стек с объектами - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 12:49     Стек с объектами #1
Ребят, у меня есть базовый класс и три дочерних класса. Нужно чтобы объекты доччерних хранились в стеках. Вобщем должно быть три стека=/ но неясно как поместить туда объекты классов....
Класс стек я написала, а что дальше делать не знаю..Естьь пример выполнения программы с матрицей...но понять все-равно не могу..
Помогите кто чем может..
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
131
132
133
134
135
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{      }
 
//----Базовый класс "Осветительные приборы"----//
class osv_prib
{
public:
       virtual void print(TMemo* M)const = 0;
       osv_prib():cena(0),imya("nope"),CCBETA(0){};
       osv_prib( double cena1 ,AnsiString imya1,double CCBETA1):
       cena(cena1),imya(imya1),CCBETA(CCBETA1){};
protected:
       double cena;//цена
       AnsiString imya;//имя
       double   CCBETA;//сила света
};
 
 
 
 //---- класс "Светильники"----//
class svetilniki: public osv_prib
{public:
        svetilniki():dalnost(0){};
        svetilniki(double cena1 ,AnsiString imya1,double   CCBETA1, double dalnost1):
        osv_prib(cena1,imya1, CCBETA1),dalnost(dalnost1){};
        virtual void print (TMemo* M) const;
        svetilniki& operator= (const svetilniki &a);
protected:
        double dalnost;//Дальность освещения
};
void svetilniki :: print(TMemo* M) const{
M->Lines->Add("Светильники:");
M->Lines->Add("Цена: "+FloatToStr(cena));
M->Lines->Add("Имя: "+imya);
M->Lines->Add("Сила света: "+FloatToStr(CCBETA));
M->Lines->Add("Дальность: "+FloatToStr(dalnost));
}
svetilniki& svetilniki::operator=(const svetilniki &a){
cena = a.cena;
imya = a.imya;
CCBETA = a.CCBETA;
dalnost = a.dalnost;
return (*this);
}
 
 
 
 //----класс"Прожекторы"----//
class proj: public osv_prib {
public:
        proj():ploshad(0){};
        proj(double cena1 ,AnsiString imya1,double   CCBETA1, int ploshad1):
        osv_prib(cena1,imya1,CCBETA1),ploshad(ploshad1){};
        virtual void print(TMemo* M) const;
        proj& operator= (const proj &a);
protected:
        int ploshad; //площадь освещения
};
void proj::print(TMemo* M) const{
        M->Lines->Add("Прожекторы:");
        M->Lines->Add("Цена: "+FloatToStr(cena));
        M->Lines->Add("Имя: "+imya);
        M->Lines->Add("Сила света: "+FloatToStr(CCBETA));
        M->Lines->Add("Площадь освещения: "+IntToStr(ploshad));
}
proj& proj::operator=(const proj &a){
        cena = a.cena;
        imya = a.imya;
        CCBETA = a.CCBETA;
        ploshad = a.ploshad;
return (*this);
}
 
 
 
 
 //----класс "Ночники"----//
class nochniki: public svetilniki{
public:
        nochniki():vid(""){};
        nochniki(double cena1 ,AnsiString imya1,double CCBETA1,double dalnost,AnsiString vid1):
        svetilniki(cena1 ,imya1, CCBETA1,dalnost),
        vid(vid1){};
        virtual void print (TMemo* M) const;
        nochniki& operator= (const nochniki &a);
protected:
        AnsiString vid;// вид
};
void nochniki::print(TMemo* M) const {
        M->Lines->Add("Ночники:");
        M->Lines->Add("Цена: "+FloatToStr(cena));
        M->Lines->Add("Имя: "+imya);
        M->Lines->Add("Сила света: "+FloatToStr(CCBETA));
        M->Lines->Add("Разновидность: "+(vid));
}
nochniki& nochniki::operator= (const nochniki &a){
        cena = a.cena;
        imya = a.imya;
        CCBETA = a.CCBETA;
        vid = a.vid;
return (*this);
}
 
 
//----Класс Стек----//
template <class Type1>
class Stack
{private:
        enum {MAX = 10};
        int st [MAX]; //стек в виде массива
        int top;    //вершина стека
 
public:
        Stack(Type1 st1,Type1 st2,Type1 st3);
        Stack(){top = 0;} // конструктор
        ~Stack(){};
        void push(int var)//поместить в стек
        {st [ ++top ] = var;}
        int pop (){return st [top--];} //взяьть из стека
        void print(TMemo* MM);
        Stack& operator=(const Stack& T);
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
10.06.2012, 12:58     Стек с объектами #2
Так у вас массив создается для int и помещаются в него int, а вы говорите, надо классы помещать. Надо сделать Type1 st[MAX], вероятно, и подчистить push/pop
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 13:06     Стек с объектами #3
Цитата Сообщение от Electroflower Посмотреть сообщение
Класс стек я написала, а что дальше делать не знаю
если
Цитата Сообщение от Electroflower Посмотреть сообщение
но неясно как поместить туда объекты классов
, то как ты класс написала? Любой класс начинается с декларации и семантики членов, чтоб их сочинить, надо понимать, что дальше делать.

Добавлено через 2 минуты
Цитата Сообщение от Electroflower Посмотреть сообщение
void push(int var)//поместить в стек
не правильно. Стек ты не написала. Пушаться должна переменная, которую ты хочешь поместить в стек. У тебя это объект.

Добавлено через 54 секунды
Цитата Сообщение от Electroflower Посмотреть сообщение
int pop (){return st [top--];} //взяьть из стека
Не правильно. Поп должен возвращать переменную того типа, что хранится в стеке. У тебя это объект.

Добавлено через 1 минуту
Цитата Сообщение от Electroflower Посмотреть сообщение
int st [MAX]; //стек в виде массива
это массив интов, а тебе надо хранить объекты.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 13:07  [ТС]     Стек с объектами #4
taras atavin,
Цитата Сообщение от taras atavin Посмотреть сообщение
Цитата Сообщение от Electroflower Посмотреть сообщение
void push(int var)//поместить в стек
не правильно. Стек ты не написала. Пушаться должна переменная, которую ты хочешь поместить в стек. У тебя это объект.
Добавлено через 54 секунды
Цитата Сообщение от Electroflower Посмотреть сообщение
int pop (){return st [top--];} //взяьть из стека
Не правильно. Поп должен возвращать переменную того типа, что хранится в стеке. У тебя это объект.
а как правильно написать?=/
мне нужно три стека в первом объекты svetilniki, во втором proj, в третьем nochniki...
как раз непонла как это делается=(
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 13:28     Стек с объектами #5
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
template <class TBase> class Stack
{
 private:
  class TItem
  {
   public:
    TBase *Data;
    TItem *Previus;
  };
  TItem *Last; // Вершина стека
 public:
         Stack    (           )
  {
   Last=NULL;
  }
        ~Stack    (           )
  {
   TItem *p;
   while (Last!=nullptr)
   {
    p=Last->Previus;
    delete Last;
    Last=p;
   }  
  }
  void   push     (TBase   Item)
  {
   TBase *p;
   p=new TItem;
   p->Data   =Item;
   p->Previus=Last;
   Last=p;
  }
  TBase  pop      (            )
  {
   TBase r;
   TItem *p;
   r=Last->Data;
   p=Last->Previus;
   delete Last;
   Last=p;
  }
  void   print    (TMemo *Memo)
  {
   TItem *p;
   Memo->Clear();
   for (p=Last; p!=nullptr; p=p->Previus)
   {
    p->Data.print(Memo);
   }
  }
  Stack  operator=(const Stack& T)
  {
   Stack r;
   TItem *p1;
   TItem *p2;
   if (T.Last!=nullptr)
   {
    r.Last=new TItem;
    for (p1=T.Last, p2=r.Last; p1>=nullptr; p1=p1->Previus, p2=p2->Previus)
    {
     p2->Data=p1->Data;
     if (p1->Previus!=nullptr)
     {
      p2->previus=new TItem;
      else p2=nullptr;
     }
    }
   }
  }
};
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 13:35  [ТС]     Стек с объектами #6
taras atavin, спасибо)
<class TBase> вместо TBase название своего класса? или нет
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 13:42     Стек с объектами #7
Нет. Кури специализацию шаблона класса. В шаблоне оставляешь, как есть, а в декларациях стеков (не путать стек с классом стека, шаблон создан для класса, а не для стека) пишешь пишешь уже
C++
1
2
3
Stack <svetilniki> StackOfSvetilniki;
Stack <proj> StackOfProj;
Stack <nochniki> StackOfNochniki;
StackOfSvetilniki, StackOfProj, StackOfNochniki - это уже стеки. Не классы стеков, а именно стеки. Их имена можешь поменять, то есть заменить StackOfSvetilniki, StackOfProj, StackOfNochniki на что то другое.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 14:19  [ТС]     Стек с объектами #8
taras atavin, когда объявляю
C++
1
2
3
Stack <svetilniki> StackOfSvetilniki;
Stack <proj> StackOfProj;
Stack <nochniki> StackOfNochniki;
выдает ошибку
[C++ Error] Unit1.cpp(132): E2451 Undefined symbol 'nullptr'
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 14:20     Стек с объектами #9
Если у тебя старый компилятор, то меняй на простой NULL. Дефайнить nullptr через NULL смысла нету, так как nullptr - это именно указатель, он ещё должен сам решать неоднозначность вызова при перегрузке сразу на инт и на указатель.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 14:38  [ТС]     Стек с объектами #10
taras atavin, да, у меня Builder 6
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 14:40     Стек с объектами #11
Ну боленд я по TMemo заподозрил, просто не подумал про шестой. Ставь просто NULL.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 15:16  [ТС]     Стек с объектами #12
taras atavin, можно вас еще помучать?)
когда объявляю стеки как вы писали выдает ошибку
[C++ Error] Unit1.cpp(156): E2294 Structure required on left side of . or .*

Добавлено через 4 минуты
я пишу функцию печати наверно не так...
C++
1
StackOfSvetilniki.print(Memo4)
...
стек пуст получается...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 15:29     Стек с объектами #13
Цитата Сообщение от Electroflower Посмотреть сообщение
[C++ Error] Unit1.cpp(156): E2294 Structure required on left side of . or .*
И о какой строке эта мессага? Кидай её сюда.
Цитата Сообщение от Electroflower Посмотреть сообщение
стек пуст получается...
По дефолту он и должен быть пуст. Заполнить его - задача не класса стека и не его декларации, а вызовов метода push.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 15:42  [ТС]     Стек с объектами #14
taras atavin, надо сначала добавить элементы в стек?
Вложения
Тип файла: rar Начало.rar (374.2 Кб, 5 просмотров)
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 15:52  [ТС]     Стек с объектами #15
строка вот эта:
C++
1
   p->Data.print(Memo);
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 15:54     Стек с объектами #16
Ну конечно.
C++
1
2
3
4
5
class TItem
        {public:
                TBase Data;
                TItem *Previus;
        };
. Данные по указателю водятся в массивах, а это список.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 16:07  [ТС]     Стек с объектами #17
taras atavin, а как правильно прописать кнопки ввода, печати? все переделывать нужно?=(
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 16:09     Стек с объектами #18
А как вообще устроено приложение? Например, откуда ты собираешься брать объекты для добавления в стеки? Как хочешь писать поля (например, название и цену), если они запривачены?
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
10.06.2012, 16:11     Стек с объектами #19
Electroflower,Sed nihil scis, libri legi.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 16:15     Стек с объектами
Еще ссылки по теме:

Работа с объектами C++
Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? C++
C++ Работа с объектами в С++

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

Или воспользуйтесь поиском по форуму:
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 16:15  [ТС]     Стек с объектами #20
taras atavin, объекты как-то из файла взять нужно=/ это мне еще предстоит...
у меня вроде везде public
Yandex
Объявления
10.06.2012, 16:15     Стек с объектами
Ответ Создать тему
Опции темы

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