cplusplus11.Examples/templates/template-class3.cpp
Source: cplusplus11.Examples/templates/template-class3.cpp
#include<iostream>
#include<iomanip>
#include<string>
template /* template parameters */<typename T, int X, int Y>
class Matrix {
public:
Matrix() {
clear();
}
void clear() {
for(unsigned int i = 0; i < X; ++i) {
for(unsigned int z = 0; z < Y; ++z) {
matrix[i][z] = T();
}
}
}
void add(Matrix<T,X,Y> &m) {
for(unsigned int i = 0; i < X; ++i) {
for(unsigned int z = 0; z < Y; ++z) {
matrix[i][z] += m.matrix[i][z];
}
}
}
void sub(Matrix<T,X,Y> &m) {
for(unsigned int i = 0; i < X; ++i) {
for(unsigned int z = 0; z < Y; ++z) {
matrix[i][z] -= m.matrix[i][z];
}
}
}
void mul(Matrix<T,X,Y> &m) {
for(unsigned int i = 0; i < X; ++i) {
for(unsigned int z = 0; z < Y; ++z) {
matrix[i][z] *= m.matrix[i][z];
}
}
}
void div(Matrix<T,X,Y> &m) {
for(unsigned int i = 0; i < X; ++i) {
for(unsigned int z = 0; z < Y; ++z) {
if(m.matrix[i][z] != 0)
matrix[i][z] /= m.matrix[i][z];
}
}
}
T &operator()(int x, int y) { return matrix[x][y]; }
void print() {
std::cout << "Values = \n";
for(unsigned int i = 0; i < X; ++i) {
std::cout << "[ ";
for(unsigned int z = 0; z < Y; ++z) {
std::cout << std::setw(4) << matrix[i][z] << " ";
}
std::cout << " ]\n";
}
}
private:
T matrix[X][Y];
};
// declarations:
/*
class C;
extern int x;
*/
// definitions
/*
class C {];
int x;
*/
int main() {
Matrix /* template arguments */<float, 8, 8> matrix1, matrix2;
for(unsigned int i = 0; i < 8; ++i) {
for(unsigned int z = 0; z < 8; ++z) {
matrix1(i, z) = i*i*0.1f;
matrix2(i, z) = z*z*0.1f;
}
}
matrix1.add(matrix2);
matrix1.print();
matrix1.mul(matrix2);
matrix1.print();
return 0;
}