学习笔记 c++ (C++ 类模板)

类模板定义: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();
    
}

猜你喜欢

转载自blog.csdn.net/qq_42145185/article/details/82896845
今日推荐