C++中的模板(二)

template<typename T1,typename T2>//这里的typename也可以替换成class
T1 Func(const T1& a,const T2& b){//也可以有返回值
cont<<a<<""<<b<<endl;
}
//实例化推演出具体的函数
int main(){

Func(x,y);
}
template<typename T>
Add(const T& a,const T& b){/const 放置权限被放大
return a+b;
}

int main(){
//实参传递的类型,推演T 的类型
double x=1.2,y=2.3;
int s=1,z=9;
count<<Add((int)x,z)<<endl;
count<<Add(x,(double)z)<<endl;
//显式实例化
count<<<int>Add(a,z)<<endl;
count<<<double>Add(a,z)<<endl;
}
template<ttypename T>
T* Alloc(int n)
{
    return new T[n];
}

int main(){
 // 有些函数无法自动推,只能显示实例化
   double* p1 = Alloc<double>(10);
return 0;
}

类模板

// 类模板
template<class T>
class Stack
{
public:
	Stack(size_t capacity = 3);

	void Push(const T& data);

	// 其他方法...

	~Stack()
	{
		if (_array)
		{
			free(_array);
			_array = NULL;
			_capacity = 0;
			_size = 0;
		}
	}

private:
	T* _array;
	int _capacity;
	int _size;
};

int main()
{
	Stack<int> s1;    // int
	Stack<double> s2; // double
	Stack<char> s3;   // char

	return 0;
}


template<class T>
Stack<T>::Stack(size_t capacity)
{
	/*_array = (T*)malloc(sizeof(T) * capacity);
	if (NULL == _array)
	{
		perror("malloc申请空间失败!!!");
		return;
	}*/
	_array = new T[capacity];

	_capacity = capacity;
	_size = 0;
}

template<class T>
void Stack<T>::Push(const T& data)
{
	// CheckCapacity();
	_array[_size] = data;
	_size++;
}
template<class T>
void Stack<T>::Push(const T& data)
{
	// CheckCapacity();
	_array[_size] = data;
	_size++;
}

int main()
{
	Stack<int> s1;    // int
	Stack<double> s2; // double
	Stack<char> s3;   // char

	return 0;
}

  

// 普通类,类名和类型是一样

// 类模板,类名和类型不一样

// 类名:Stack

// 类型:Stack<T>

相关推荐

  1. C++模板

    2024-07-11 15:16:03       20 阅读
  2. C++模板(十):forward模板

    2024-07-11 15:16:03       15 阅读
  3. C++模板方法模式

    2024-07-11 15:16:03       19 阅读
  4. C++模板使用

    2024-07-11 15:16:03       50 阅读
  5. C++模板---下

    2024-07-11 15:16:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 15:16:03       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 15:16:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 15:16:03       43 阅读
  4. Python语言-面向对象

    2024-07-11 15:16:03       54 阅读

热门阅读

  1. slf4j日志框架和logback详解

    2024-07-11 15:16:03       19 阅读
  2. Redis的配置和优化

    2024-07-11 15:16:03       18 阅读
  3. springboot 抽出多个接口中都有相同的代码的方法

    2024-07-11 15:16:03       21 阅读
  4. OpenJudge | 最高的分数

    2024-07-11 15:16:03       19 阅读
  5. springmvc 如何对接接口

    2024-07-11 15:16:03       19 阅读
  6. VUE2用elementUI实现父组件中校验子组件中的表单

    2024-07-11 15:16:03       18 阅读
  7. 解释一下DecorView和Window之间的交互。

    2024-07-11 15:16:03       21 阅读
  8. 【AI原理解析】-目标检测概述

    2024-07-11 15:16:03       17 阅读