IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 模板 -> 正文阅读

[C++知识库]C++ 模板

1、函数模板

template <class T>
void foo(T param)
{
	// do something
}

这里有几件事情需要注意
第一行代码里,在尖括号里有一个class T,用来告诉编译器:字母T将在接下来的函数里代表一种不确定的数据类型,当然T可以随便命名。
关键字class不是类的数据类型,而是一种约定俗成的说法,当然class也可以随便命名啦。

template<typename TI>
void swap(TI &a,TI &b)
{
	//注意 &的意思是引用,相当于浅拷贝,作用是原变量存储空间内的值也跟着改变
	TI temp = a;
	a = b;
	b = temp;
	
}

注意:不要把函数模板分成原型和实现两个部分。如果编译器看不到模板的完整代码,它就无法正确生成代码。所得到的出错信息乱七八糟。

为了明确表明swap()是一个函数模板,还可以用

swap<int>(a,b)

来调用这个函数。

2、类模板

template<typename T>
class Myclass
{
	Myclass();
	void swap(T &a,T &b);
}

注意:构造器的实现将是下面这样:

Myclass<T>::Myclass()
{
	//初始化操作
}

因为Myclass是一个类模板,所以不能只写出Myclass::Myclass(),编译器需要你在这里给出一种与Myclass()配合使用的数据类型,必须在尖括号里提供它,因为没有确定的数据类型可以提供,所以使用一个T作为占位符即可。

来个栗子

#include<iostream>
#include<string>
template<typename T>
class Stack
{
public:
	stack(unsigned int size = 100);
	~stack();
	void push(T value);
	T pop();
private:
	unsigned omt size;
	unsigned int sp;
	T *data;
};
template<typename T>
Stack<T>::Stack(unsigned int size)
{
	this->size = size;
	data = new T[size];//开辟动态数组
	sp=0;//栈底指针	
}
template<typename T>
Stack<T>::~Stack()
{
	delete []data;
}
template<typename T>
void Stack<T>::push(T value)
{
	data[sp++] = value;
}
template<typename T>
T stack<T>::pop()
{
	return data[--p];
}
int main()
{
	Stack<int>instack(100);
	intstack.push(1);
	intstack.push(2);
	intstack.push(3);
	std::cout<<intstack.pop()<<std::endl;
	std::cout<<intstack.pop()<<std::endl;
	std::cout<<intstack.pop()<<std::endl;
	return 0;
}

运行结果:3
2
1

注意:c++没有限制只能使用一个类型占位符,如果类模板需要一种以上的类型,根据具体情况多使用几个占位符即可。

template <typename T,typename U>
class Myclass
{
  //..
}

在实例化时,我们只需要这么做:
Myclass<int,float>myclass;

3、内联函数inline

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:33:43  更:2021-09-09 11:36:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 12:23:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计