模板编程
来源:互联网 发布:知乎平均学历 编辑:程序博客网 时间: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
- 模板--模板元编程
- 模板编程
- C++模板编程->模板型模板参数
- 模板高级编程
- 初探模板元编程
- 模板元编程
- 函数模板编程
- C++模板元编程
- 模板元编程
- 模板元编程
- C++模板元编程
- 模板编程有待加强
- C# 模板编程
- C++模板元编程
- WIN32编程模板
- 模板元编程-C++
- c++之模板编程
- C++模板元编程
- CMake error 合集(Configuring incomplete errors occurred!)
- 今天是一个适合加班的日系
- ViewPager
- c++ operator 问题
- G-Expanding Rods
- 模板编程
- CSS那些事
- (0044) iOS 开发之SDWebImage 深度学习其源码和原理
- 算法提高 P1001
- C语言文件读写操作
- Unity 几种优化建议
- 什么是BSS段和c语言程序如何变成可执行的文件
- 欢迎使用CSDN-markdown编辑器
- Fragment