模板类示例-数组
#include<iostream>
#include<string>
using namespace std;
template <class T,int len> // 定长数组容器
class Array {
private:
T items[len];
public:
Array(){}
~Array(){}
T& operator[](int ii) { return items[ii]; }
const T& operator[](int ii) const { return items[ii]; }
};
template <class T> // 变长数组容器
class Vector {
private:
int len; //数组元素的个数
T* items; //数组元素
public:
Vector(int size = 0): len(size) { // 构造函数
items = new T[len];
}
~Vector() { // 析构函数
delete[] items; items = nullptr;
}
void resize(int size) { // 扩展数组的内存空间
if (size <= len) return; // 只能往更大扩展
T* tmp = new T[size]; //分配更大的内存空间
for (int ii = 0; ii < len; ii++) tmp[ii] = items[ii]; //原来数组中的元素复制到新数组
delete[] items;
items = tmp; //数组指针指向新数组
len = size;
}
int size() const { return len; }
T& operator[](int ii) // 重载操作符[],可以修改数组中的元素
{
if (ii >= len) resize(ii + 1);
return items[ii];
}
const T& operator[](int ii) const{ return items[ii]; } // 重载操作符[],不能修改数组中的元素
};
int main() {
// Array<string, 10>aa;
Vector<string> aa(1);
aa[0] = "侠士", aa[1] = "你猜"; aa[2] = "没问题"; aa[3] = "好的"; aa[4] = "99";
for (int ii = 0; ii < 5; ii++) cout << "aa[" << "]=" << aa[ii] << endl;
}
利用模板类实现定长和边长数组容器,其中变长数组结果如下:
模板类的成员模板
#include<iostream>
#include<string>
using namespace std;
template <class T1,class T2> // 变长数组容器
class AA {
public:
T1 m_x;
T2 m_y;
AA(const T1 x,const T2 y): m_x(x),m_y(y){}
void show() { cout << "m_x=" << m_x << ",m_y=" << m_y << endl; }
template<class T>
class BB {
public:
T m_a;
T1 m_b;
BB(){}
void show() { cout << "m_a=" << m_a << ",m_b="<<m_b << endl; }
};
BB<string>m_bb;
template<typename T>
void show(T tt) {
cout << "tt=" << tt << endl;
cout << "m_x=" << m_x << ",m_y=" << m_y << endl;
m_bb.show();
}
};
int main() {
AA<int, string>a(88, "我是一只傻傻鸟");
a.show();
a.m_bb.m_a = "你猜我是谁";
a.m_bb.show();
a.show("我他么管你是谁");
}