C-Programmierung
Container Klassen Template
← KlassenTemplate | ● | Standard Template Library →
Einfaches Beispiel einer templatisierten Container-Klasse, welche ein einziges Element vom Typ T aufnehmen kann:
template<class T>
class C {
public:
C(const T &e=0) {element = e;}
void set(const T &e) {element = e;}
T get() {return(element);}
protected:
T element;
};
class C {
public:
C(const T &e=0) {element = e;}
void set(const T &e) {element = e;}
T get() {return(element);}
protected:
T element;
};
Einfaches Beispiel einer templatisierten Container-Klasse, welche eine Matrix mit c Spalten, r Zeilen mit Elementen vom Typ T speichern kann:
template<class T>
class Matrix {
public:
Matrix(int c=1, int r=1)
{
m=new T[c*r];
for (int i=0; i<c*r; i++) m[i]=0;
cols=c;
rows=r;
}
~Matrix() {delete[] m;}
void set(int c, int r, const T &e) {m[c+r*cols] = e;}
T get(int c, int r) {return(m[c+r*cols]);}
protected:
T *m;
int cols, rows;
};
class Matrix {
public:
Matrix(int c=1, int r=1)
{
m=new T[c*r];
for (int i=0; i<c*r; i++) m[i]=0;
cols=c;
rows=r;
}
~Matrix() {delete[] m;}
void set(int c, int r, const T &e) {m[c+r*cols] = e;}
T get(int c, int r) {return(m[c+r*cols]);}
protected:
T *m;
int cols, rows;
};
Beispiele:
// representation of a mathematical 3x3 matrix
Matrix<double> mat(3,3);
// produce identity matrix
mat.set(0,0,1);
mat.set(1,1,1);
mat.set(2,2,1);
// representation of an RGB image
Matrix<RGBPixel> img(1024,768);
...
Matrix<double> mat(3,3);
// produce identity matrix
mat.set(0,0,1);
mat.set(1,1,1);
mat.set(2,2,1);
// representation of an RGB image
Matrix<RGBPixel> img(1024,768);
...
Hinweis: Aufgrund von Compiler-Beschränkungen empfiehlt es sich, templatisierte Klassen nur header-only zu definieren.