fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Declarations
  5.  
  6. template <typename T>
  7. class List;
  8. template <typename T>
  9. class Stack;
  10. template <typename T>
  11. class Queue;
  12.  
  13. template <typename T>
  14. ostream& operator<<(ostream&, const List<T>&);
  15. template <typename T>
  16. ostream& operator<<(ostream&, const Stack<T>&);
  17. template <typename T>
  18. ostream& operator<<(ostream&, const Queue<T>&);
  19.  
  20. template <typename T>
  21. class Node{
  22. private:
  23. friend class List<T>;
  24. friend class Stack<T>;
  25. friend class Queue<T>;
  26. };
  27.  
  28. template <typename T>
  29. class List{
  30. public:
  31. friend ostream& operator<< <T>(ostream&, const List<T>&);
  32. };
  33.  
  34. template <typename T>
  35. class Stack{
  36. public:
  37. friend ostream& operator<< <T>(ostream&, const Stack<T>&);
  38. };
  39.  
  40. template <typename T>
  41. class Queue{
  42. public:
  43. friend ostream& operator<< <T>(ostream&, const Queue<T>&);
  44. };
  45.  
  46. // Definitions
  47.  
  48. template <typename T>
  49. ostream& operator<<(ostream& out, const List<T>& toPrint) {
  50. out << "List";
  51. return cout;
  52. }
  53.  
  54. template <typename T>
  55. ostream& operator<<(ostream& out, const Stack<T>& toPrint) {
  56. out << "Stack";
  57. return out;
  58. }
  59.  
  60. template <typename T>
  61. ostream& operator<<(ostream& out, const Queue<T>& toPrint) {
  62. out << "Queue";
  63. return out;
  64. }
  65.  
  66. // main
  67.  
  68. int main() {
  69. List<int> list;
  70. Stack<int> stack;
  71. Queue<int> queue;
  72.  
  73. cout << list << endl
  74. << stack << endl
  75. << queue << endl;
  76.  
  77. return 0;
  78. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
List
Stack
Queue