User Tools

Site Tools


cpp:class_templates

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:class_templates [2019/05/04 04:32] – [Ένα πιο σύνθετο παράδειγμα] gthanoscpp:class_templates [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 4: Line 4:
  
 <code cpp Box.hpp> <code cpp Box.hpp>
 +#ifndef _BOX_HPP_
 +#define _BOX_HPP_
 +
 template <typename T> template <typename T>
 class Box { class Box {
Line 31: Line 34:
   return out;   return out;
 } }
 +#endif
 </code> </code>
  
Line 51: Line 55:
   katherine.setName("Katherine");   katherine.setName("Katherine");
      
 +  cout << "--- Printing Values ---" << endl;
   cout << kate << endl;   cout << kate << endl;
   cout << katherine << endl;   cout << katherine << endl;
   cout << studentBox.get() << endl;   cout << studentBox.get() << endl;
 +  cout << "--- Destroying objects ---" << endl;
 } }
 </code> </code>
Line 59: Line 65:
 ===== Ένα πιο σύνθετο παράδειγμα ===== ===== Ένα πιο σύνθετο παράδειγμα =====
  
-Ας υποθέσουμε ότι θέλουμε να κατασκευάσουμε ένα στατικό πίνακα (συγκεκριμένης χωρητικότητας) για την αποθήκευση πληροφορίας. Σε αναλογία με την κλάση **Box<Τ>** θέλουμε να φτιάξουμε ένα πίνακα στον οποίο να μπορούμε να αποθηκεύσουμε διαφορετικούς τύπους δεδομένων. Η κλάση **Array<T>** δίνεται παρακάτω:+Ας υποθέσουμε ότι θέλουμε να κατασκευάσουμε ένα στατικό πίνακα (συγκεκριμένης χωρητικότητας) για την αποθήκευση πληροφορίας. Σε αναλογία με την κλάση **Box<Τ>** θέλουμε να φτιάξουμε ένα πίνακα στον οποίο να μπορούμε να αποθηκεύσουμε διαφορετικούς τύπους δεδομένων. Η παρακάτω κλάση **Array<T>** περιέχει ένα στατικό πίνακα δεδομένων μεγέθους //size//:
  
 <code cpp Array.hpp> <code cpp Array.hpp>
- 
 #ifndef __ARRAY_H__ #ifndef __ARRAY_H__
 #define __ARRAY_H__ #define __ARRAY_H__
Line 76: Line 81:
 public: public:
   Array();   Array();
-  Array(const T t[], int length); 
   Array(const Array<T,size>& a);   Array(const Array<T,size>& a);
   void set(T e, int index);   void set(T e, int index);
Line 90: Line 94:
 Array<T,size>::Array() { Array<T,size>::Array() {
   // empty   // empty
-} 
- 
-template<typename T, int size> 
-Array<T,size>::Array(const T t[], int length) {  
-  int copy_size = length > size ? size : length; 
-  for(int i=0; i<copy_size; i++) 
-    array[i] = t[i]; 
 } }
  
Line 139: Line 136:
 std::ostream &operator<<(std::ostream& out, const Array<T,size>& t) { std::ostream &operator<<(std::ostream& out, const Array<T,size>& t) {
   for(int i=0; i<size; i++) {   for(int i=0; i<size; i++) {
-    out << t.array[i] << " ";+    out << t.array[i] 
 +    if(i<size-1) 
 +      out << "";
   }   }
   return out;   return out;
Line 147: Line 146:
  
 <code cpp ArrayUsage.cpp> <code cpp ArrayUsage.cpp>
- 
 #include "Array.hpp" #include "Array.hpp"
 +#include "Student.hpp"
  
 #define ARRAY_SIZE 10 #define ARRAY_SIZE 10
Line 156: Line 155:
 int main() { int main() {
   Array<int, ARRAY_SIZE> a;   Array<int, ARRAY_SIZE> a;
 +  
   for(int i=0; i<ARRAY_SIZE; i++)   for(int i=0; i<ARRAY_SIZE; i++)
     a[i] = i;     a[i] = i;
      
 +  cout << "--- Printing a ---\n";
   cout << a << endl;   cout << a << endl;
      
-  Array<int, ARRAY_SIZE> b(a);+  Array<int, 10> b(a)
 +   
 +  cout << "--- Printing b ---\n"; 
 +  cout << b << endl; 
 +   
 +  Array<Student,4> sts; 
 +  sts[0] = Student("Kate", 12345); 
 +  sts[1] = Student("Nick", 12346); 
 +  sts[2] = Student("Mary", 12347); 
 +  sts[3] = Student("Susan", 12348); 
 +   
 +  cout << "--- Printing sts ---\n"; 
 +  cout << sts << endl;
          
 } }
 </code> </code>
cpp/class_templates.1556944359.txt.gz · Last modified: 2019/05/04 03:32 (external edit)