模板编程

来源:互联网 发布:知乎平均学历 编辑:程序博客网 时间:2024/05/16 17:20

以前总是以各种理由想逃避写博客,总觉得写博客很浪费时间,最近才发现,学到现在,也是有一定的基础,接触的新东西越来越多,学的东西越来越快,然而,学得快忘得也快,故此,现在写些博客记录学习的过程,我相信,现在应该不玩。下面进入正题。

  模板是C++语言中重要的概念,它提供了一种通用的方法来开发可重用的代码,即可以创建参数化的C++类型,模板分为两种类型:函数模板和类模板。在STL中,模板到处可见,关于模板的基础内容,我不想记录(网上资料到处都是),实例才是学习编程的最好方法。

下面动态数组模板类源码:

MyArray.h

#pragma oncetemplate<typename T>class MyArray{private:    int m_nTotalSize;//数组总长度    int m_nValidSize;//数组有效长度    T* data;//数据public:    MyArray(int size=3);    ~MyArray();    void Add(T value);    int getSize();    T get(int index);    T operator[](int);};

MyArray.cpp

#include"MyArray.h"template<typename T>MyArray<T>::MyArray(int size=3)//数组默认总长度为3{data = new T[size]{ 0 };m_nTotalSize = size;m_nValidSize = 0;}template<typename T>MyArray<T>::~MyArray(){if (data != nullptr){delete[] data;data = nullptr;}}template<typename T>void MyArray<T>::Add(T value)//向数组中出入数据{if (m_nValidSize < m_nTotalSize)//有效长度小于总长度{data[m_nValidSize] = value;m_nValidSize++;}else//有效长度大于等于总长度时{T * tmp = new T[m_nTotalSize];//原始数据备份for (int i = 0; i < m_nTotalSize; i++){tmp[i] = data[i];}delete[] data;m_nTotalSize *= 2;data = new T[m_nTotalSize];//重新分配空间for (int i = 0; i < m_nValidSize; i++)//回写备份数据{data[i] = tmp[i];}delete[]tmp;data[m_nValidSize] = value;m_nValidSize++;}}template<typename T>int MyArray<T>::getSize(){return m_nValidSize;}template<typename T>T MyArray<T>::get(int index){if (index < m_nTotalSize)return data[index];return (T)0;}template<typename T>T MyArray<T>::operator[](int index){return get(index);}
测试代码

#include".\MyArray.cpp"//不能用MyArry.h,因为二次编译导致链接问题#include<iostream> int main(){    MyArray<int> obj;    for (int i = 1; i < 5; i++)    {        obj.Add(i);        std::cout << obj[i-1] << " ";    }    std::cout << std::endl;    std::cout << obj.getSize() << std::endl;    return 0;}





0 0
原创粉丝点击