类模板定义:template <class T> class MyTemplateClass { ... };
类模板特例化:template <> class MyTemplateClass <specific-data-type> { ... };
CMakeLists.txt
cmake_minimum_required(VERSION 3.2)
PROJECT(matrix2x2)
INCLUDE_DIRECTORIES(
include
)
set(SRC
include/matrix2x2.hpp
src/matrix2x2.cpp
)
add_executable(matrix2x2 ${SRC})
File: Matrix2x2.hpp
#ifndef MATRIX_2X2_HPP__
#define MATRIX_2X2_HPP__
using namespace std;
/**
m(11) m(12)
m(21) m(22)
*/
template <class T>
class Matrix2x2
{
public:
Matrix2x2(T m11, T m12, T m21, T m22)
{
m[0][0] = m11;
m[0][1] = m12;
m[1][0] = m21;
m[1][1] = m22;
}
Matrix2x2(T m[2][2])
{
m[0][0] = m[0][0];
m[0][1] = m[0][1];
m[1][0] = m[1][0];
m[1][1] = m[1][1];
}
Matrix2x2()
{
m[0][0] = 0;
m[0][1] = 0;
m[1][0] = 0;
m[1][1] = 0;
}
Matrix2x2 add(Matrix2x2 x)
{
Matrix2x2<T> sum;
sum.m[0][0] = m[0][0] + x.m[0][0];
sum.m[0][1] = m[0][1] + x.m[0][1];
sum.m[1][0] = m[1][0] + x.m[1][0];
sum.m[1][1] = m[1][1] + x.m[1][1];
return sum;
}
Matrix2x2 Multiply(Matrix2x2 x)
{
Matrix2x2<T> sum;
sum.m[0][0] = m[0][0] * x.m[0][0] + m[0][1] * x.m[1][0];
sum.m[0][1] = m[0][0] * x.m[0][1] + m[0][1] * x.m[1][1];
sum.m[1][0] = m[1][0] * x.m[0][0] + m[1][1] * x.m[1][0];
sum.m[1][1] = m[1][0] * x.m[0][1] + m[1][1] * x.m[1][1];
return sum;
}
void Print()
{
cout<<"|"<<m[0][0]<<" "<<m[0][1]<<"|"<<endl;
cout<<"|"<<m[0][0]<<" "<<m[0][1]<<"|"<<endl;
}
T m[2][2];
};
/*/////////////////////////////////////////////////////
template<class T>
Matrix2x2::Matrix2x2(T m11, T m12, T m21, T m22)
{
m[0][0] = m11;
m[0][1] = m12;
m[1][0] = m21;
m[1][1] = m22;
}
template<class T>
Matrix2x2::Matrix2x2(T m)
{
m[0][0] = m[0][0];
m[0][1] = m[0][1];
m[1][0] = m[1][0];
m[1][1] = m[1][1];
}
template<class T>
Matrix2x2::Matrix2x2()
{
m[0][0] = 0;
m[0][1] = 0;
m[1][0] = 0;
m[1][1] = 0;
}
template<class T>
Matrix2x2::add(Matrix2x2 x)
{
Matrix2x2<T> sum;
sum.m[0][0] = m[0][0] + x.m[0][0];
sum.m[0][1] = m[0][1] + x.m[0][1];
sum.m[1][0] = m[1][0] + x.m[1][0];
sum.m[1][1] = m[1][1] + x.m[1][1];
return sum;
};
template<class T>
Matrix2x2::Multiply(Matrix2x2 x)
{
Matrix2x2<T> sum;
sum.m[0][0] = m[0][0] * x.m[0][0] + m[0][1] * x.m[1][0];
sum.m[0][1] = m[0][0] * x.m[0][1] + m[0][1] * x.m[1][1];
sum.m[1][0] = m[1][0] * x.m[0][0] + m[1][1] * x.m[1][0];
sum.m[1][1] = m[1][0] * x.m[0][1] + m[1][1] * x.m[1][1];
return sum;
}
template<class T>
Matrix2x2::Print()
{
cout<<"|"<<m[0][0]<<" "<<m[0][1]<<"|"<<endl;
cout<<"|"<<m[0][0]<<" "<<m[0][1]<<"|"<<endl;
}
*////////////////////////////////////////////////////////
#endif
TestMatrix2x2.cpp
#include<iostream>
#include"matrix2x2.hpp"
using namespace std;
int main(int argc,char** argv)
{
Matrix2x2<int> x(1,2,3,4);
Matrix2x2<int> y(1.1,2.2,3.3,4.4);
cout<<"x: "<<endl;
x.Print();
cout<<"y: "<<endl;
y.Print();
Matrix2x2<int> A = x.add(y);
cout<<"A:"<<endl;
A.Print();
Matrix2x2<int> B = x.add(y);
cout<<"B:"<<endl;
B.Print();
}