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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 1
#1

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

10.06.2012, 12:49. Просмотров 1946. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек с объектами (C++):

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

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

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

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

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

Работа с объектами - C++
Здравствуйте, делаю курсовую по работе с датами, их вычитанием и сложением. Вообще в начале у меня идет процесс инициализации даты,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
10.06.2012, 12:58 #2
Так у вас массив создается для int и помещаются в него int, а вы говорите, надо классы помещать. Надо сделать Type1 st[MAX], вероятно, и подчистить push/pop
0
taras atavin
Ушёл с форума.
3569 / 1753 / 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]; //стек в виде массива
это массив интов, а тебе надо хранить объекты.
0
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 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
Ушёл с форума.
3569 / 1753 / 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;
     }
    }
   }
  }
};
0
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 1
10.06.2012, 13:35  [ТС] #6
taras atavin, спасибо)
<class TBase> вместо TBase название своего класса? или нет
0
taras atavin
Ушёл с форума.
3569 / 1753 / 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 на что то другое.
0
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 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
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 14:20 #9
Если у тебя старый компилятор, то меняй на простой NULL. Дефайнить nullptr через NULL смысла нету, так как nullptr - это именно указатель, он ещё должен сам решать неоднозначность вызова при перегрузке сразу на инт и на указатель.
0
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 1
10.06.2012, 14:38  [ТС] #10
taras atavin, да, у меня Builder 6
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 14:40 #11
Ну боленд я по TMemo заподозрил, просто не подумал про шестой. Ставь просто NULL.
0
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 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
Ушёл с форума.
3569 / 1753 / 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.
0
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 1
10.06.2012, 15:42  [ТС] #14
taras atavin, надо сначала добавить элементы в стек?
0
Вложения
Тип файла: rar Начало.rar (374.2 Кб, 5 просмотров)
Electroflower
Форумчанка
290 / 83 / 9
Регистрация: 05.01.2012
Сообщений: 432
Записей в блоге: 1
10.06.2012, 15:52  [ТС] #15
строка вот эта:
C++
1
   p->Data.print(Memo);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 15:52
Привет! Вот еще темы с ответами:

Действия с объектами - C++
У меня объекты класса выполняют одну и туже функцию, как можно сделать все это циклом (если возможно) ? Add_Pac.Write_Start_OL(); ...

Работа с объектами в С++ - C++
С текстового файла считывается информация о студентах (фамилия, когда и на какой срок выдали книгу из библиотеки). Пользователь вводит...

Программа с классом и объектами!!!))) - C++
Всем привет)Помогите пожалуйста исправить программку так,что бы она была с классом и объектами!!!))) Задание: Ввести несколько строк...

Сообщения между объектами - C++
Уважаемые господа! Я недавно начал читать литературу по Smalltalk. Так вот, там коммуникация между объектами происходит через отправку и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.06.2012, 15:52
Ответ Создать тему
Опции темы

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