模板编程
2017-05-09 21:15
141 查看
以前总是以各种理由想逃避写博客,总觉得写博客很浪费时间,最近才发现,学到现在,也是有一定的基础,接触的新东西越来越多,学的东西越来越快,然而,学得快忘得也快,故此,现在写些博客记录学习的过程,我相信,现在应该不玩。下面进入正题。
模板是C++语言中重要的概念,它提供了一种通用的方法来开发可重用的代码,即可以创建参数化的C++类型,模板分为两种类型:函数模板和类模板。在STL中,模板到处可见,关于模板的基础内容,我不想记录(网上资料到处都是),实例才是学习编程的最好方法。
下面动态数组模板类源码:
MyArray.h
MyArray.cpp
模板是C++语言中重要的概念,它提供了一种通用的方法来开发可重用的代码,即可以创建参数化的C++类型,模板分为两种类型:函数模板和类模板。在STL中,模板到处可见,关于模板的基础内容,我不想记录(网上资料到处都是),实例才是学习编程的最好方法。
下面动态数组模板类源码:
MyArray.h
#pragma once template<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; }
相关文章推荐
- PHP 的Oop+模板编程初级示例与类库下载
- /* WIN-TC BGI 图形编程模板 */
- ASP.NET 4.0 Ajax 实例--DataView模板编程 DEMO 下载
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板
- 【东南大学】【仪器科学与工程学院】C++下第四次上机作业 单链表类模板 非书上版本 本人自创版本 部分参考书上 包含编程时一些该注意的事项
- Winsock;TCP/IP编程;模板代码;VC++;单线程;
- C#模板编程(2): 编写C#预处理器,让模板来的再自然一点
- 前端模板编程方式
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Select模型(多路复用), 实用Socket通信模板。
- C++模板编程及函数对象
- ABAP/4 报表编程模板
- [编程学习]C++ 函数模板学习总结
- Asp.NET 4.0 ajax实例--DataView 模板编程1
- ABAP/4 报表编程模板
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- 模板高级编程
- 使用 Groovy 模板进行 MVC 编程
- Win32 API 窗口编程模板
- 模板编程有待加强
- 基于Linux的socket编程模板