Мне нужно сделать так, чтобы программа работала с int, float (double), char одновременно.
#include "stdafx.h" #include<iostream.h> #include<conio.h> #define maxSize 10 #include<stdlib.h> #include<string>
template <typename T, int MAXSIZE> class Stack { public: Stack(); void pop(); void push(); void top(); void menu(); int empty(); int full(); void DisplayStack(); void operation();
private: int last; int item[maxSize]; }; template <typename T, int MAXSIZE> Stack<T,MAXSIZE>::Stack() { last = 0; menu(); } template <typename T, int MAXSIZE> void Stack<T,MAXSIZE> :: menu() { cout << "PRESS 1 FOR PUSH THE ITEM ON STACK" << endl; cout << "PRESS 2 FOR POP THE ITEM ON STACK" << endl; cout << "PRESS 3 FOR DISPLAY THE WHOLE STACK" << endl; cout << "PRESS 4 FOR DISPLAY THE TOP ELEMENT OF STACK" << endl; cout<<"ENTER YOUR CHOICE" << endl; operation(); } template <typename T, int MAXSIZE> void Stack<T,MAXSIZE> :: operation() { int choice;
cin >> choice; switch(choice) { case 1: push(); break;
case 2: pop(); break;
case 3: DisplayStack(); break;
case 4: top(); break;
default: cout << "PLZ ENTER VALID NUMBER" <<endl; operation(); }
} template <typename T, int MAXSIZE> int Stack<T,MAXSIZE>::empty() { if( last == 0 ) return 0; else return 1; } template <typename T, int MAXSIZE> int Stack<T,MAXSIZE>::full() { if( last == maxSize ) return 0; else return 1; } template <typename T, int MAXSIZE> void Stack<T,MAXSIZE>::push() { if( full() == 0 ) { throw std::out_of_range("Stack<>::push(): stack is full"); } else { char ch; int x; last = last + 1; cout<<"ENTER THE ELEMENT TO BE INSERTED" << endl; cin>>x; item[last] = x; cout<<"ANOTHER ITEM ON STACK? y/n "<< endl; cin>>ch; if(ch=='y') push(); cin.get(); } menu(); } template <typename T, int MAXSIZE> void Stack<T,MAXSIZE>::pop() { if(empty() == 0) { throw std::out_of_range("Stack<>::pop(): empty stack"); } else { char ch;
cout<<"AS THE LAST ELEMENT IN STACK IS "<<item[last] << endl; last = last-1; cout<<"WANT TO POP OUT ANOTHER ELEMENT y/n" << endl; cin>>ch; if(ch=='y') pop(); cin.get(); } menu(); }
template <typename T, int MAXSIZE> void Stack<T,MAXSIZE> :: top() { if (empty() == 0) { throw std::out_of_range("Stack<>::top(): empty stack"); } else
cout<<"TOP ELEMENT IS " << endl; cout << item[last] << endl;
}
template <typename T, int MAXSIZE> void Stack<T,MAXSIZE>::DisplayStack() {
cout<<"THE ELEMENTS IN STACK IS"<<endl; for(int i = 1;i <= last; i++) { cout << item[i] << endl; } cin.get(); cout<<"PRESS ENTER FOR MAIN MENU " << endl; cin.get(); menu();
}
void main() { try { Stack<int,10> int10Stack; }
catch (std::exception const& ex) { cerr << "Exception: " << ex.what() << endl;
}
getch(); }
|