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

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

Войти
Регистрация
Восстановить пароль
 
lev_
3 / 3 / 0
Регистрация: 26.05.2014
Сообщений: 158
#1

Шаблон класса "Стек" - C++

03.06.2014, 22:24. Просмотров 883. Ответов 0
Метки нет (Все метки)

пример шаблона класса "стек" (Borland Builder):
stack.h
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
template <class Type>
 class Stack
 {
 private:
   Type* stk_ptr;
   int max_len;
   int top;
 public:
  Stack (int size);     //конструктор
  Stack ();                // конструктор по умолчанию 
  Stack (const Stack<Type> &L);    //конструктор копирования
  ~Stack();               // деструктор
  void push(Type element);  // основные операции
  void pop ();
  Type stacktop();
  int showtop(){return top;};
  bool empty();  
  // перегрузка операции сложения двух стеков (+)         
  Stack<Type>& operator + (Stack<Type> &L); 
  bool operator > (Stack<Type> &L);                    // перегрузка операции > 
  Type* info(){return stk_ptr;};
 };
 
Описание методов класса:
//--------------- конструктор ----------------------------
 
template <class Type>
   Stack<Type>::Stack(int size)
   {
     stk_ptr= new Type [size];
     max_len=size-1;
     top=-1;
   }
//-------------- конструктор копирования (операция присваивания =)-----------------
template <class Type>
   Stack<Type>::Stack(const Stack<Type> &L)
   {
     stk_ptr= new Type [L.max_len+1];
     max_len=L.max_len;
     top=L.top;
     for (int i=0; i<=top; i++)
     stk_ptr[i]=L.stk_ptr[i];
   }
//---------------- конструктор по умолчанию ---------
template <class Type>
   Stack<Type>::Stack()
   {
     stk_ptr= new Type [100];
     max_len=99;
     top=-1;
   }
//---------------деструктор-----------------
 
template <class Type>
   Stack<Type>::~Stack()
   {
   delete [] stk_ptr;
   }
//----------------вывод вершины стека--------
 
   template <class Type>
  Type Stack<Type>::stacktop()
   {
    return stk_ptr[top];
   }
//----------------вставка  значение в стек----
 
 template <class Type>
void Stack<Type>::push(Type element)
 {
 if (top==max_len) return ;
  stk_ptr[++top]=element;
 }
//---------------удаление значения из стека----
 
 template <class Type>
void  Stack<Type>::  pop ()
{
 if (empty()) return ;
 top--;
}
//----метод – предикат , проверка стека на пустоту----------
 
template <class Type>
 bool Stack<Type>:: empty()
{
  return (top==-1);
}
//---- перегруженная операция  сложения двух стеков-------
 
template <class Type>
 Stack<Type>& Stack<Type>::operator + (Stack<Type> &L)
{ int i=0;
  Stack<Type>* S=new Stack<Type> (max_len+L.max_len+2);
 
    for (; i<=top; i++)
          S->push(stk_ptr[i]);
 
     for (i=0; i<=L.top; i++)
          S->push(L.stk_ptr[i]);
 
    return *S;
  }
//-----------перегруженная операция  сравнения двух стеков----------- 
 
template <class Type>
  bool Stack<Type>::operator > (Stack<Type> &L)
  {
  return (top>L.top);
  }
Пример программы-клиента класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Stack<int>  *stk2;     // параметризация  шаблона класса  типом int
stk2=new Stack<int>(10);   stk2->push(56);   stk2->push(67);
Edit1->Text=stk2->stacktop();
 
Stack<double> stk1(20);  stk1.push(23.5); stk1.push(-34.5); Edit1->Text=stk1.showtop();
 
 
// применение перегруженных операций
 
Stack<double>  stk5=stk1;  stk5.push(45.1);
Stack<double> st;     // параметризация  шаблона класса  типом double
st=stk1+stk5;   st.push(56.1);  
double* m=st.info();  Memo1->Clear();
for(int i=0; i<=st.showtop(); i++)  Мемо1->Lines->Add(FloatToStr(m[i]));
Edit2->Text=st.showtop();
 
if (stk1>st) Edit2->Text=" больше";  else  Edit2->Text="меньше ";
как на основе этой программы написать следующую программу на Visual Studio:
Решить на базе шаблона класса стек следующие задачи, создав программу - клиент:
1. Создать объект типа стек, параметризировав его типом AnsiString
2. Создать 2 объекта типа стек, параметризировав их типом float и вычислить сумму двух стеков.
3. Создать объект типа стек, параметризировав его типом Person

Пример описания и объявления объекта для решения задания:
C++
1
2
3
4
5
6
7
8
9
10
struct Person {
  string   Name;
  string  Fam;
  int Data_b;
  bool Sex;
  bool operator ==(Person &);     //перегрузка операции сравнения на равенство};
 
Stack <Person>  StackPerson;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 22:24     Шаблон класса "Стек"
Посмотрите здесь:

Ошибка в программе, где создается шаблон класса "стек" C++
C++ Разработать шаблон класса "Очередь"
C++ Написать шаблон для класса "Рабочий"
C++ Шаблон класса "Однонаправленный список"
Шаблон класса "очередь с приоритетами" C++
C++ Шаблон класса "Пациент"
C++ Шаблон класса "Стек" на основе массива
Шаблон класса "Животное" (Мультимножество) C++
Шаблон класса "Бинарное дерево" с насследованием C++
C++ Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон"
Исправить ошибку компиляции "для использования класса шаблон требуется список аргументов шаблона" C++
C++ Описать шаблон класса АТД: "Участник очереди на печать издания: фамилия, телефон, количество страниц"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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