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 revisionBoth sides next revision
cpp:class_templates [2019/05/04 04:25] – [Templates κλάσεων] gthanoscpp:class_templates [2019/05/04 04:28] – [Ένα πιο σύνθετο παράδειγμα] gthanos
Line 59: Line 59:
 ===== Ένα πιο σύνθετο παράδειγμα ===== ===== Ένα πιο σύνθετο παράδειγμα =====
  
-Ας υποθέσουμε ότι θέλουμε να κατασκευάσουμε ένα στατικό πίνακα (συγκεκριμένης χωρητικότητας) για την αποθήκευση πληροφορίας. Σε αναλογία με την κλάση **Box<Τ>** θέλουμε να φτιάξουμε ένα πίνακα στον οποίο να μπορούμε να αποθηκεύσουμε διαφορετικούς τύπους δεδομένων.+Ας υποθέσουμε ότι θέλουμε να κατασκευάσουμε ένα στατικό πίνακα (συγκεκριμένης χωρητικότητας) για την αποθήκευση πληροφορίας. Σε αναλογία με την κλάση **Box<Τ>** θέλουμε να φτιάξουμε ένα πίνακα στον οποίο να μπορούμε να αποθηκεύσουμε διαφορετικούς τύπους δεδομένων. Η κλάση **Array<T>** δίνεται παρακάτω: 
 + 
 +<code cpp Array.hpp> 
 + 
 +#ifndef __ARRAY_H__ 
 +#define __ARRAY_H__ 
 + 
 +#include <iostream> 
 +#include <cstring> 
 +#include <cassert> 
 + 
 +template <typename T, int size> 
 +class Array { 
 +  T array[size]; 
 +   
 +public: 
 +  Array(); 
 +  Array(const T t[], int length); 
 +  Array(const Array<T,size>& a); 
 +  void set(T e, int index); 
 +  T get(int index) const; 
 +  void rmv(int index); 
 +  Array<T,size>& operator=(Array<T,size>& a); 
 +  T& operator[](int index); 
 +  template<typename U, int k> 
 +  friend std::ostream &operator<<(std::ostream& out, const Array<U,k>& t); 
 +}; 
 + 
 +template<typename T, int size> 
 +Array<T,size>::Array() { 
 +  // 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]; 
 +
 + 
 +template<typename T, int size> 
 +Array<T,size>::Array(const Array<T,size>& a) {  
 +  for(int i=0; i<size; i++) 
 +    array[i] = a.array[i]; 
 +
 + 
 +template<typename T, int size> 
 +void Array<T,size>::set(T e, int index) { 
 +  assert(index>=0 && index<size); 
 +  array[index] = e; 
 +
 + 
 +template<typename T, int size> 
 +T Array<T,size>::get(int index) const { 
 +  assert(index>=0 && index<size); 
 +  return array[index]; 
 +
 + 
 +template<typename T, int size> 
 +void Array<T,size>::rmv(int index) { 
 +  assert(index>=0 && index<size); 
 +  for(int i=index+1; i<size; i++) 
 +    array[i-1] = array[i]; 
 +
 + 
 +template<typename T, int size> 
 +Array<T,size>& Array<T,size>::operator=(Array<T,size>& a) { 
 +  for(int i=0; i<size; i++) 
 +    array[i] = a.array[i]; 
 +
 + 
 +template<typename T, int size> 
 +T& Array<T,size>::operator[](int index) { 
 +  assert(index>=0 && index<size); 
 +  return array[index];   
 +
 + 
 +template<typename T, int size> 
 +std::ostream &operator<<(std::ostream& out, const Array<T,size>& t) { 
 +  for(int i=0; i<size; i++) { 
 +    out << t.array[i] << " "; 
 +  } 
 +  return out; 
 +
 +#endif 
 +</code>
  
  
  
  
cpp/class_templates.txt · Last modified: 2020/05/25 06:52 (external edit)