C++ 类模板 小例

/********************************************************************

    created:   2012/08/14   12:14

    fileName:  main.cpp

    author:       Toby

   

    purpose:   一个关于类模板的不是很严谨的例子,

              但是可以通过这个例子简单了解下类模板,

              代码如下:

*********************************************************************/

#include <iostream>

#include <vector>

using std::cout;

using std::endl;

using std::vector;

 

/************************************************************************/

/*                             *单形参的类模板*                      */

/************************************************************************/

template <class T>

class DoGetMax

{

public:

    explicit DoGetMax():m_vValues(){}

    explicit DoGetMax(const DoGetMax&value);

    explicit DoGetMax(const T& value);

    explicit DoGetMax(const vector<T>& input){m_vValues = input;}//inline

    inline DoGetMax&operator<<(const T& value);

 

    ~DoGetMax(){}

 

    void Add(const T& value){m_vValues.push_back(value);}//inline

    T Max() const;

    T GetSum() const;

 

private:

    vector<T>m_vValues;

};

 

template <class T>

T DoGetMax<T>::GetSum() const

{

    T tmpSum = T(0);

    int tmpSize = m_vValues.size();

    for (int i=0; i<tmpSize; ++i){

       tmpSum += m_vValues.at(i);

    }

    return tmpSum;

}

 

template <class T>

DoGetMax<T>& DoGetMax<T>::operator<<(const T&value )

{///< 原本是可以隐式内联的,放在此处便于看出需要有两处的DoGetMaxT

    Add(value);

    return *this;

}

 

template <class T>

DoGetMax<T>::DoGetMax(const DoGetMax&value )

{

    m_vValues = value.m_vValues;

}

 

template <class T>

DoGetMax<T>::DoGetMax(const T&value )

{

    int tmpSize = m_vValues.size();

    m_vValues.clear();

    m_vValues.push_back(value);

}

 

template <class T>

T DoGetMax<T>::Max() const

{

    T theMax = m_vValues.at(0);

    int tmpSize = m_vValues.size();

    for (int i = 1;i < tmpSize; ++i){

       if (m_vValues.at(i) > theMax){

           theMax = m_vValues.at(i);

       }

    }

    return theMax;

}

 

/************************************************************************/

/*                *多形参的类模板*                                     */

/************************************************************************/

template<class T,class S,class P>

class TTResult

{

public:

    explicit TTResult():m_result(0){}

    explicit TTResult(const T& tvalue,const S& svalue = 1,const P&pvalue = 1);

 

    ~TTResult(){}

 

    double GetResult(){return m_result;}

 

private:

    double m_result;

};

 

template<class T,class S,class P>

TTResult<T, S, P>::TTResult(const T&tvalue,const S& svalue /*= 1*/,const P& pvalue /*= 1*/ )

{

    m_result = (tvalue * svalue * 1.0)/ pvalue;

}

 

int main(void)

{

    DoGetMax<int>myTest;

    myTest.Add(1);

    myTest.Add(5);

 

    int maxnum = myTest.Max();

    cout<<"The Max0 number is: "

       <<maxnum

       <<endl;

 

    myTest<<6         ///< 测试重载

       <<11

       <<12;

 

    DoGetMax<int>myTest0(myTest);

    int maxnum0 = myTest0.Max();

    cout<<"The Max1 number is: "

       <<maxnum0

       <<endl;

 

    int nSum = myTest0.GetSum();

    cout<<"The Sum is: "

       <<nSum

       <<endl;

 

    TTResult<int,double,int> tmpResult(nSum,2.0,3);

    double nResult = tmpResult.GetResult();

    cout<<"The Result is: "

       <<nResult

       <<endl;

 

    TTResult<double,int,short> tmpResult0(nSum,5,3);

    double nResult0 = tmpResult0.GetResult();

    cout<<"The Result0 is: "

       <<nResult0

       <<endl;

 

    DoGetMax<int>myTest1(8);

    int maxnum1 = myTest1.Max();

    cout<<"The Max2 number is: "

       <<maxnum1

       <<endl;

 

    vector<int> tmpVT;

    tmpVT.clear();

    tmpVT.push_back(10);

 

    DoGetMax<int>myTest2(tmpVT);

    int maxnum2 = myTest2.Max();

    cout<<"The Max3 number is: "

       <<maxnum2

       <<endl;

 

    system("pause");

    return 0;

}

 

转载于:https://my.oschina.net/imtoby/blog/72825

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值