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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Проброс ссылок http://www.cyberforum.ru/cpp-beginners/thread1198282.html
Почему такое нельзя сделать?(MSVC 2010) class Base { shared_ptr<istream> in; public: Base(istream& input):in(&input){}; }; class Derived:public Base
C++ Как работает компилятор С++ Подскажите, как происходит компиляция исходного кода, написанного на С++? К примеру мы имеем файл test.cpp, в котором написан код программы, например: //Простая программа, написанная на языке C++. #include <iostream> using namespace std; main () { int num=1; http://www.cyberforum.ru/cpp-beginners/thread1198272.html
C++ Ввод и вывод типов переменных
Ребята, помогите пожалуйста! У меня практика, а c++ builder вообще не изучали(((( Вообщем, задание такое: Организовать ввод и вывод данных заданных типов, снабдив распечатки соответствующими заголовками. При осуществлении ввода\вывода использовать операторы cin и cout, для этого необходимо подключить директиву #include <iostream.h> Вот на какой я стадии: #include <iostream.h> int main() {...
C++ Создать класс «автомобиль»
помогите доделать программу. :cry: //Создать класс «автомобиль», имеющий марку (указатель на строку), //число цилиндров двигателя, мощность. Определить конструкторы, //деструктор и функцию печати. Создать public-производный класс – //«грузовики», имеющий грузоподъемность и тип кузова. Определить //конструкторы по умолчанию и с разным числом параметров, //деструкторы, функцию печати....
C++ Объясните пожалуйста детально этот код, КТО МОЖЕТ http://www.cyberforum.ru/cpp-beginners/thread1198223.html
#include <iostream> #include <locale.h> #include <conio.h> #include <Windows.h> using namespace std; static char field = {" ", "# #", "# #",
C++ Круг в консоли Всем привет! Буду благодарен, если кто-нибудь сможет подсказать решение. И так, имеется класс Circle, задается радиус и нужно отрисовать в консоли круг с помощью звездочек "*". подробнее

Показать сообщение отдельно
lev_
2 / 2 / 0
Регистрация: 26.05.2014
Сообщений: 119
03.06.2014, 22:24     Шаблон класса "Стек"
пример шаблона класса "стек" (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;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru