Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
1

Стек с объектами

10.06.2012, 12:49. Просмотров 2099. Ответов 30
Метки нет (Все метки)

Ребят, у меня есть базовый класс и три дочерних класса. Нужно чтобы объекты доччерних хранились в стеках. Вобщем должно быть три стека=/ но неясно как поместить туда объекты классов....
Класс стек я написала, а что дальше делать не знаю..Естьь пример выполнения программы с матрицей...но понять все-равно не могу..
Помогите кто чем может..
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);
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 12:49
Ответы с готовыми решениями:

Используя стек, описать функцию проверяющую, является ли стек пустым
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя...

Заполнить стек 20 случайными числами с интервала [0; -10]. Вывести стек на экран. Изъять из стека каждый четвертый элеме
Заполнить стек 20 случайными числами с интервала . Вывести стек на экран....

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора?
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в...

Сформировать стек из 6 цифр. Вывести стек на экран. Удалить элементы из стека, увеличить каждый из них на единицу и снов
Сформировать стек из 6 цифр. Вывести стек на экран. Удалить элементы из стека,...

30
Jtalk
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
10.06.2012, 12:58 2
Так у вас массив создается для int и помещаются в него int, а вы говорите, надо классы помещать. Надо сделать Type1 st[MAX], вероятно, и подчистить push/pop
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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]; //стек в виде массива
это массив интов, а тебе надо хранить объекты.
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 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...
как раз непонла как это делается=(
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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;
     }
    }
   }
  }
};
1
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
10.06.2012, 13:35  [ТС] 6
taras atavin, спасибо)
<class TBase> вместо TBase название своего класса? или нет
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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 на что то другое.
1
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 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'
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
10.06.2012, 14:20 9
Если у тебя старый компилятор, то меняй на простой NULL. Дефайнить nullptr через NULL смысла нету, так как nullptr - это именно указатель, он ещё должен сам решать неоднозначность вызова при перегрузке сразу на инт и на указатель.
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
10.06.2012, 14:38  [ТС] 10
taras atavin, да, у меня Builder 6
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
10.06.2012, 14:40 11
Ну боленд я по TMemo заподозрил, просто не подумал про шестой. Ставь просто NULL.
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 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)
...
стек пуст получается...
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
10.06.2012, 15:29 13
Цитата Сообщение от Electroflower Посмотреть сообщение
[C++ Error] Unit1.cpp(156): E2294 Structure required on left side of . or .*
И о какой строке эта мессага? Кидай её сюда.
Цитата Сообщение от Electroflower Посмотреть сообщение
стек пуст получается...
По дефолту он и должен быть пуст. Заполнить его - задача не класса стека и не его декларации, а вызовов метода push.
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
10.06.2012, 15:42  [ТС] 14
taras atavin, надо сначала добавить элементы в стек?
0
Вложения
Тип файла: rar Начало.rar (374.2 Кб, 5 просмотров)
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
10.06.2012, 15:52  [ТС] 15
строка вот эта:
C++
1
   p->Data.print(Memo);
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
10.06.2012, 15:54 16
Ну конечно.
C++
1
2
3
4
5
class TItem
        {public:
                TBase Data;
                TItem *Previus;
        };
. Данные по указателю водятся в массивах, а это список.
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
10.06.2012, 16:07  [ТС] 17
taras atavin, а как правильно прописать кнопки ввода, печати? все переделывать нужно?=(
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
10.06.2012, 16:09 18
А как вообще устроено приложение? Например, откуда ты собираешься брать объекты для добавления в стеки? Как хочешь писать поля (например, название и цену), если они запривачены?
0
Jtalk
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
10.06.2012, 16:11 19
Electroflower,Sed nihil scis, libri legi.
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
10.06.2012, 16:15  [ТС] 20
taras atavin, объекты как-то из файла взять нужно=/ это мне еще предстоит...
у меня вроде везде public
0
10.06.2012, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 16:15

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
Сабж g++ 4.5.0

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:(...

Работа с объектами
Здравствуйте, делаю курсовую по работе с датами, их вычитанием и сложением. ...


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

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

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