💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞
泛型模板
函数重载的缺点
- 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数
- 代码的可维护性比较低,一个出错可能所有的重载均出错
//
为了提高效率,编译器生成一个模板根据不同的类型来生成代码
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
模板分为 类模板 和 函数模板
类模板
书写模式:template 或者 template
类模板的实例化
1.需要每个函数模板之前都带有 template
或者 template
2.分为隐式实例化和显式实例化, //显式实例化就是调用时 函数名之后指定参数
//例 Swap(T);
3.显式实例化使用场景:编译推导不出参数类型就需要显式实例化
4.类型转化需要用const来接收
#include <iostream>
using namespace std;
template <class T>
void Swap(T& x, T& y)
{
T tmp = x;
x = y;
y = tmp;
}
//显示实例化的场景
template <typename T>
T* Func(int n)
{
return new T[n];
}
//类型转化会产生临时变量用const接收
template<typename T>
T Add(const T& x, const T& y)
{
return x + y;
}
int main()
{
int a = 0;
int b = 1;
//隐式实例化
Swap(a,b);
double c = 0.0;
double d = 1.1;
Swap(c, d);
//显示实例化,编译器推导不出参数类型
Func<double>(10);
//当参数类型不同时(这里也是显示实例化)
Swap<int>(a,c);
//类型转化会产生临时变量用const接收
T Add<double>(a,b);
}
模板参数的匹配原则
1.对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模 板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板
2.模板函数不允许自动类型转换,但普通函数可以进行自动类型转换
类模板
类模板一般用于显式实例化
类的实例化
类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类文章来源:https://www.toymoban.com/news/detail-483137.html
template <typename T>
class Queuenode
{
public:
T x;
Queuenode<T>* next;
};
template <typename T>
class Queue
{
public:
Queue();
~Queue();
Queue(Queue<T> const &q);
};
//这里注意 template<typenam T>每个函数或类之前需要写上
template <typename T>
Queue<T>:: Queue()//这里 类型指定函数
{
//.........
}
文章来源地址https://www.toymoban.com/news/detail-483137.html
到了这里,关于c++之模板初阶的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!