ݺߣ
Submit Search
6.1 Шаблоны классов
•
0 likes
•
596 views
DEVTYPE
Follow
6. Шаблоны
Read less
Read more
1 of 5
Download now
Download to read offline
More Related Content
6.1 Шаблоны классов
1.
Программирование на языке
C++ Лекция 6 Шаблоны классов Александр Смаль 1/5
2.
Проблема “одинаковых классов” struct
ArrayInt { explicit ArrayInt(size_t size) : data_(new int[size ]) , size_(size) {} ~ArrayInt () {delete [] data_ ;} size_t size () const { return size_; } int operator []( size_t i) const { return data_[i]; } int & operator []( size_t i) { return data_[i]; } ... private: int * data_; size_t size_; }; struct ArrayFlt { explicit ArrayFlt(size_t size) : data_(new float[size ]) , size_(size) {} ~ArrayFlt () {delete [] data_ ;} size_t size () const { return size_; } float operator []( size_t i) const { return data_[i]; } float & operator []( size_t i) { return data_[i]; } ... private: float * data_; size_t size_; }; 2/5
3.
Решение в стиле
C: макросы #define DEFINE_ARRAY (Name , Type ) struct Name { explicit Name(size_t size) : data_(new Type[size ]) , size_(size) {} ~Name () { delete [] data_; } size_t size () const { return size_; } Type operator []( size_t i) const { return data_[i]; } Type & operator []( size_t i) { return data_[i]; } ... private: Type * data_; size_t size_; } DEFINE_ARRAY (ArrayInt , int); DEFINE_ARRAY (ArrayFlt , float ); int main () { ArrayInt ai (10); ArrayFlt af (20); ... return 0; } 3/5
4.
Решение в стиле
C++: шаблоны классов template <class Type > struct Array { explicit Array(size_t size) : data_(new Type[size ]) , size_(size) {} ~Array () { delete [] data_; } size_t size () const { return size_; } Type operator []( size_t i) const { return data_[i]; } Type & operator []( size_t i) { return data_[i]; } ... private: Type * data_; size_t size_; }; int main () { Array <int > ai (10); Array <float > af (20); ... return 0; } 4/5
5.
Шаблоны классов с
несколькими параметрами template <class Type , class SizeT = size_t , class CRet = Type > struct Array { explicit Array(SizeT size) : data_(new Type[size ]) , size_(size) {} ~Array () {delete [] data_ ;} SizeT size () const {return size_ ;} CRet operator []( SizeT i) const { return data_[i]; } Type & operator []( SizeT i) { return data_[i]; } ... private: Type * data_; SizeT size_; }; void foo () { Array <int > ai (10); Array <float > af (20); Array <Array <int >, size_t , Array <int > const&> da (30); ... } typedef Array <int > Ints; typedef Array <Ints , size_t , Ints const &> IInts; void bar () { IInts da (30); } 5/5
Download