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 revision Previous revision
Next revision
Previous revision
cpp:class_templates [2019/05/04 04:25]
gthanos [Templates κλάσεων]
cpp:class_templates [2020/05/25 06:52]
Line 1: Line 1:
-====== Templates κλάσεων ====== 
- 
-Σε αναλογία με τα templates συναρτήσεων μπορούμε να κατασκευάσουμε κλάσεις που να λαμβάνουν ως παράμετρο ένα ή περισσότερους τύπους δεδομένων. Στο παρακάτω παράδειγμα, έχουμε την κλάση **Box<T>** η οποία είναι παραμετρική. 
- 
-<code cpp Box.hpp> 
-template <typename T> 
-class Box { 
-  T e; 
-public: 
-  Box(T e); 
-  T get() const; 
-  void set(T e); 
-  template <typename U> 
-  friend std::ostream& operator<<(std::ostream& out, const Box<U>& t); 
-}; 
- 
-template <typename T> 
-Box<T>::Box(T e) { 
-  this->e = e; 
-} 
- 
-template <typename T> 
-T Box<T>::get() const { return e; } 
- 
-template <typename T> 
-void Box<T>::set(T e) { this->e = e; } 
- 
-template <typename T> 
-std::ostream& operator<<(std::ostream& out, const Box<T>& t) { 
-  out << t.get(); 
-  return out; 
-} 
-</code> 
- 
-H παραπάνω κλάση μπορεί να παράγει διαφορετικούς τύπους δεδομένων, ανάλογα με τον τύπο **T**. Στο παρακάτω παράδειγμα έχουμε ένα μία κλάση **Box<int>**, μία κλάση **Box<double>** και μία κλάση **Box<Student>**. 
- 
-<code cpp BoxUsage.cpp> 
-#include <iostream> 
-#include "Box.hpp" 
-#include "Student.hpp" 
- 
-using namespace std; 
- 
-int main() { 
-   
-  Box<int> b(15); 
-  Box<double> d(4.23); 
-  Student kate = {"Kate", 1234}; 
-  Box<Student> studentBox(kate); 
-  Student katherine = studentBox.get(); 
-  katherine.setName("Katherine"); 
-   
-  cout << kate << endl; 
-  cout << katherine << endl; 
-  cout << studentBox.get() << endl; 
-} 
-</code> 
- 
-===== Ένα πιο σύνθετο παράδειγμα ===== 
- 
-Ας υποθέσουμε ότι θέλουμε να κατασκευάσουμε ένα στατικό πίνακα (συγκεκριμένης χωρητικότητας) για την αποθήκευση πληροφορίας. Σε αναλογία με την κλάση **Box<Τ>** θέλουμε να φτιάξουμε ένα πίνακα στον οποίο να μπορούμε να αποθηκεύσουμε διαφορετικούς τύπους δεδομένων. 
- 
- 
- 
  
cpp/class_templates.txt · Last modified: 2020/05/25 06:52 (external edit)