cpp:class_templates
This is an old revision of the document!
Table of Contents
Templates κλάσεων
Σε αναλογία με τα templates συναρτήσεων μπορούμε να κατασκευάσουμε κλάσεις που να λαμβάνουν ως παράμετρο ένα ή περισσότερους τύπους δεδομένων. Στο παρακάτω παράδειγμα, έχουμε την κλάση Box<T> η οποία είναι παραμετρική.
- 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; }
H παραπάνω κλάση μπορεί να παράγει διαφορετικούς τύπους δεδομένων, ανάλογα με τον τύπο T. Στο παρακάτω παράδειγμα έχουμε ένα μία κλάση Box<int>, μία κλάση Box<double> και μία κλάση Box<Student*>.
- 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 george = {"George", 1234}; Box<Student*> studentBox(&george); }
Ένα πιο σύνθετο παράδειγμα
Ας υποθέσουμε ότι θέλουμε να κατασκευάσουμε ένα στατικό πίνακα (συγκεκριμένης χωρητικότητας) για την αποθήκευση πληροφορίας. Σε αναλογία με την κλάση Box<Τ> θέλουμε να φτιάξουμε ένα πίνακα στον οποίο να μπορούμε να αποθηκεύσουμε διαφορετικούς τύπους δεδομένων.
cpp/class_templates.1556895868.txt.gz · Last modified: 2019/05/03 14:04 (external edit)