Форум программистов, компьютерный форум 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);
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 16:34     Стек с объектами #21
читай:
Цитата Сообщение от Electroflower Посмотреть сообщение
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;//сила света
};
паблик только методы, а поля запротекчены.

Добавлено через 1 минуту
Кстати, имена двух членов совпадать не должны. Как компил это пропускает?

Добавлено через 41 секунду
Цитата Сообщение от Electroflower Посмотреть сообщение
taras atavin, объекты как-то из файла взять нужно
формат файла в студию.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 19:10  [ТС]     Стек с объектами #22
Цитата Сообщение от taras atavin Посмотреть сообщение
Кстати, имена двух членов совпадать не должны. Как компил это пропускает?
это где?Оо
формат файла *.txt
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
10.06.2012, 19:21  [ТС]     Стек с объектами #23
я пытаюсь сделать все как здесь, только классы свои и вместо matrix стек должен хранить объекты класса=(
Вложения
Тип файла: rar new.rar (662.2 Кб, 6 просмотров)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.06.2012, 19:39     Стек с объектами #24
Electroflower, если классы свои, то форматы подавно свои. Формат - это представление данных, такое же внутреннее, как private-поля. Только в файловой версии. У другого класса могут быть те же внутренности? Это всё равно, что у осьминога сердце бегемота. Они разные и данные в них разные, одинаково их представить нельзя. Исключение - совместимые классы, так как именно в них данные семантически одни и те же.

Добавлено через 1 минуту
Цитата Сообщение от Electroflower Посмотреть сообщение
это где?Оо
Цена.

Добавлено через 5 минут
Цитата Сообщение от Electroflower Посмотреть сообщение
формат файла *.txt
Это только тип файла, а нужен фактический формат. Таблица, разделённая пробелами, таблица, разделённая запятыми, таблица, разделённая табуляциями, список строк, в каждой из которых поименовано каждое поле, поставлено тире и значение без апострофов и кавычек, список строк, в каждой из которых поименовано каждое поле, поставлено тире и значение в апострофах, список строк, в каждой из которых поименовано каждое поле, поставлено тире и значение в кавычках список строк, в каждой из которых поименовано каждое поле, поставлен знак равенства и значение без апострофов и кавычек, список строк, в каждой из которых поименовано каждое поле, поставлен знак равенства и значение в апострофах, список строк, в каждой из которых поименовано каждое поле, поставлен знак равенства и значение в кавычках - это всё txt. И даже свой кривоаналог xml, но по другим правилам - тоже txt.

Добавлено через 4 минуты
txt является форматом только для действительно текстовых файлов, предназначенных или для транслятора, или для человека. Если же файл разбирает любая программа, кроме транслятора языка программирования, то это что угодно на основе txt, но не сам txt. У тебя не текст, а семантически иные данные. И разбирать их будет прикладная программа.

Добавлено через 1 минуту
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;//сила света
};
выделены члены с совпадающими именами.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.06.2012, 18:56     Стек с объектами #25
Ну так что за файл? У меня вот был текстовый формат данных проги численного модлеирования, в котором порядок полей вообще подразумевался и ни где не был объявлен. Так инженер с завода специально звонил нне, чтоб этот формат разобрать, так как иначе понять, что в файле валяется было практически не возможно. Непреднамеренная шифровка вместо формата, расшифровать могу или я сам, или хотя бы с моей прогой. И это не "по аналогии, только классы свои", параллельная версия, надо было обеспечить взаимообмен между аналогичными прогами. Но я хоть додумался сменить расширение, чтоб не мог быть прочитан не совместимой прогой случайно. Так нашёлся разщработчик, которому это понадобилось специально, а "с чем его едят", он не понял.
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
14.06.2012, 17:21  [ТС]     Стек с объектами #26
taras atavin, мне так чсложно не надо было) просто записать в файл значения) уже все)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.06.2012, 15:30     Стек с объектами #27
Записать? Откуда ты их собираешься брать?
Цитата Сообщение от Electroflower Посмотреть сообщение
мне так чсложно не надо
просто будет, когда опишешь формат. А когда "читай то, не знаю что", то ещё сложнее, чем было у того инженера, который мне звонил: у него хоть сам файл был и можно было заняться криптоанализом. Только врядли бы и ФСБшники разобрали формат этим способом. Одно слово - шифровка. Из-за того, что я формат забыл описать. То, что он текстовый (txt), можно было понять после первой же попытки чтения блокнотом. Но что этот текст означает - надо или мне звонить, или Митника звать. И не факт, что и он бы за год справился. А ты пока не дала даже самого файла, только класс форматов назвала. Ну так их всего два: бинарный и txt, а курица - не птица, 1 бит - не описание.

Добавлено через 34 минуты
Вот пример спецификации формата на основе text:
Файл состоит только из текстового представления числе, перевод строки - "\r\n". В первой строке указано количество шагов шагов дискретизации по x, во второй - по y, в третьей - по z. С чертвёртой строки до последней идут сами значения температуры, разделённые запятой. В одну строку объединяются температруы в точках с совпадающими y и z, вдоль строки различается и к концу её возрастает x. Соседние строки в количестве, равном количеству шагов дискретизации по y образуют блок, в пределах блока совпадает z, в y в блоке возрастает с ростом номера строки. Блоки идут подряд без пустых строк, z от блока к блоку растёт к концу файла. Сами координаты в файле не указаны. За ось z принята вертикальная ось, положительное направление - вверх. Ось x параллельна осевой линии цапф. Ковш считается цилиндрическим, количество значений температуры в строке от её положения в файле не зависит, для ячеек за пределами ковша в файле записаны ноли, остальные значения температур не меньше 1500.
. А вот другая спецификация txt:
Перевод строки "\n". В первой строке указано количество строк за вычетом первых трёх, вторая строка содержит тип трансформатора, третья - заголовок таблицы, с четвёртой строки до последней располагаются данные таблицы. Разделитель столбов - табуляция. Заголовок таблицы имеет вид: "#\tv0\tvn\in\ik", где # - номер ступени, v0 - напряжение холостого хода, vn - номинальное напряжение, in - номинальный ток, ik - ток короткого замыкания, менять порядок полей нельзя.
. Ещё txt:
количество строк отдельное не указывается, файл читается до EOF, перевод строки - "\r\n". , в первой строке располагается заголовок таблицы, в остальных - её данные, в заголовке перечислены поля: "возраст", "табельный номер", "стаж" в том порядке, в каком хранятся данные таблицы, поддерживается любой возможный порядок полей, но в пределах файла он не меняется, разделитель столбцов - табуляция, заголовок набран только нижним регистром и не содержит лишних символов.
. Ещё:
В первой строке через пробел записано количество шагов дискретизации сначала по радиусу, потом по апликате, во второй - данные. Ячейки разделены пробелом, а ряды ячеек - табуляцией, номер ряда соответствует апликате, возрастающей вниз, а номер ячейки в ряду - радиальной координате, возрастающей от центра, перевод строки - "\r\n".
. Это всё txt.
Hrundel
25 / 25 / 2
Регистрация: 27.05.2012
Сообщений: 114
15.06.2012, 15:34     Стек с объектами #28
Вот мой стек, который я писал для простого арифметического парсера, может тебе пригодится.
В него можно помещать объекты любого типа

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
#pragma once
 
#define NULL 0
 
template <class T>
class Stack                     
{
    struct node                 
    {
        T item;
        node* next;
    };
 
private:
    node* tail;                 
    int anz_intems;             
 
public:
 
 
 
Stack(void) : anz_intems(0)
{
    tail=NULL;
}
 
 
virtual ~Stack(void)
{
}
 
 
template <class T> bool push(T &r)
{
     node* topNode = new node;
 
     if(!topNode) return 0;
    
     topNode->item = r;
     topNode->next = tail;
     tail = topNode;
 
     return 1;
}
 
 
template <class T> void pop()
{
    if(!tail) 
    {
        std::cout << "Steck ist leer";
    }
    else
    {
        node* Temp = tail;
        tail = tail->next;
        delete Temp;
    }
}
 
 
template <class T> T top()
{
    if(!tail) return 0;
    else return tail->item;
}
 
 
template <class T> int length()
{
    return anz_intems;
}
 
 
template <class T> bool empty()
{
    if(!anz_intems) return 1;
    else return 0;
}
};
Electroflower
Форумчанка
 Аватар для Electroflower
289 / 82 / 9
Регистрация: 05.01.2012
Сообщений: 424
Записей в блоге: 1
15.06.2012, 15:36  [ТС]     Стек с объектами #29
что начсчет '\t' сказать можете?

Добавлено через 1 минуту
Hrundel, спасибо
Hrundel
25 / 25 / 2
Регистрация: 27.05.2012
Сообщений: 114
15.06.2012, 15:39     Стек с объектами #30
Цитата Сообщение от Electroflower Посмотреть сообщение
что начсчет '\t' сказать можете?
в printf, '\t' = табуляция
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 05:41     Стек с объектами
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.06.2012, 05:41     Стек с объектами #31
Цитата Сообщение от Hrundel Посмотреть сообщение
в printf, '\t' = табуляция
не только в printf, но и в потоковых операторах. И если ты в файл выведешь '\t', то все программы, понимающие табуляцию, именно в этом месте и прочитают табуляцию. И, наоборот, если в txt файле табуляция, то введётся '\t'.
Yandex
Объявления
16.06.2012, 05:41     Стек с объектами
Ответ Создать тему
Опции темы

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