c++笔记

模板类示例-数组

#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("我他么管你是谁");
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值