iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++分离讲解模板的概念与使用
  • 182
分享到

c++分离讲解模板的概念与使用

2024-04-02 19:04:59 182人浏览 八月长安
摘要

目录泛类编程函数模板函数模板的概念函数模板的使用函数模板的实例化函数模板的匹配原则类模板类模板的定义格式类模板的实例化泛类编程 学习模板,首先我们需要了解一下什么是泛类编程 #inc

泛类编程

学习模板,首先我们需要了解一下什么是泛类编程

#include<iOStream>
using namespace std;
int add(int a, int b)
{
	return a + b;
}
double add(double a, double b)	//这两个add构成了函数重载
{
	return a + b;
}
int main()
{
	int a = 1;
	int b = 2;
	double c = 3;
	double d = 4;
	cout << add(a, b) << endl;	
	cout << add(c, d) << endl;	
	//假如我们想要实现不同类型变量的相加,可以创建不同的函数,构成函数重载来分别调用不同的函数
	return 0;
}

我们可以使用c++的函数重载来解决这个问题,但是函数重载本身就存在问题

1、函数重载仅仅类型不同,假如出现了新的类型,我们就需要重新写新的函数重载,代码的利用率低

2、代码可维护性低,一个出错可能会导致所有函数重载出错

泛型编程:编写与类型无关的通用代码,是代码复用的一种手段

所以c++提供了一种模板来解决这个问题

模板本质上:本来应该由你写的代码,然后不想重复写,你给了一个模板,编译器通过模板,帮你生成了对应的代码

函数模板

函数模板的概念

函数模板代表了一个函数家族,该函数模板与实参无关,当函数被使用时候会被实参初始化,从而产生不同的函数类型

函数模板的使用

函数模板的格式:

template<typename T1, typename T2, ......, typename Tn>	//函数模板的参数不止一个,可以有很多参数
//返回值类型 函数名(参数列表) {}

函数模板的使用: 

template<typename T>	//也可以用<class T>,效果和<typename T>一样,但是不能用struct
T add(T x, T y)
{
	return x + y;
}

注意:typename是函数模板的关键字,也可以使用class,但是不能使用struct

函数模板的实例化

当我们用不同的参数使用函数模板时,就称为函数模板的初始化

函数模板的实例化有两种:

1、隐式实例化(让编译器根据实参推演模板参数的实际类型)

#include<iostream>
using namespace std;
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add(a, b) << endl;	//使用了隐式实例化,由编译器自动推演实例化参数类型
	return 0;
}

2. 显式实例化(在函数名后的<>中指定模板参数的实际类型)

#include<iostream>
using namespace std;
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add<int>(a, c) << endl;	
	//由于a和c的类型不同,所以我们必须使用显示实例化,即函数名后面<type>括号中加上你想要实例化的类型
	return 0;
}

函数模板的匹配原则

1、模板模板可以和一个同名非函数模板同时存在 

2、假如模板函数和非模板函数同名,编译器会选择一个更匹配的类型进行使用

#include<iostream>
using namespace std;
int add(int x, int y)
{
	return x + y;
}
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add(a, b) << endl;	//因为a,b是整型,所以会调用非函数模板,因为有都是整型参数的非函数模板
	return 0;
}

3、模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

#include<iostream>
using namespace std;
template<typename T>	
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	cout << add(a, (int)c) << endl;	
	return 0;
}

假如我们要使用函数模板的add,需显示实例化add,或者将c强制类型转换,函数模板不会自动转换,因为他不知道要如何转换的

类模板

类模板的定义格式

类模板的定义格式:

template<class T1, class T2, ..., class Tn>
class 类模板名
{
// 类内成员定义
};
template<class T>	//创建类模板
class Date
{
public:
	void init();
private:
	int _year;
};
template<class T>	//假如我们需要在类模板的类外面定义函数,需要添加模板列表
Date<int>init()	//还需要在类名后面<>中添加模板参数列表
{
	_year = 0;
}

类模板的实例化

//Date是类名,Date<int>是类型
Date<int> d;	//类模板的实例化需要在类模板名的后面<>中添加想要实例化的类型

到此这篇关于c++分离讲解模板的概念与使用的文章就介绍到这了,更多相关c++模板内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c++分离讲解模板的概念与使用

本文链接: https://www.lsjlt.com/news/147154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++分离讲解模板的概念与使用
    目录泛类编程函数模板函数模板的概念函数模板的使用函数模板的实例化函数模板的匹配原则类模板类模板的定义格式类模板的实例化泛类编程 学习模板,首先我们需要了解一下什么是泛类编程 #inc...
    99+
    2024-04-02
  • C++详细分析讲解引用的概念与使用
    目录1.引用的概念2.引用的格式3.引用的特性4.取别名原则5.引用的使用场景做参数做返回值int&Count()的讲解传值传引用效率比较6.引用和指针的不同点1.引用的概念...
    99+
    2024-04-02
  • C++深入讲解类与封装的概念与使用
    目录一、类的组合二、类的封装三、类成员的作用域四、小结一、类的组合 电脑一般而言是由 CPU,内存,主板,键盘和硬盘等部件组合而成。 二、类的封装 类通常分为以下两个部分 类的实现...
    99+
    2024-04-02
  • C++内存模型与名称空间概念讲解
    目录1、存储持续性与作用域及链接性2、作用域和链接3、静态持续变量4、静态持续性和外部链接性5、静态持续性与内部链接性6、静态存储性与无链接性7、const8、函数和链接性9、语言的...
    99+
    2023-01-02
    C++内存模型 C++名称空间
  • C语言超详细讲解指针的概念与使用
    目录一、指针与一维数组1. 指针与数组基础2. 指针与数组3. 一个思考二、指针与字符串三、指针和二维数组1. 指针数组与数组指针2. 指针数组3. 数组指针一、指针与一维数组 1....
    99+
    2024-04-02
  • C++超详细讲解模板的使用
    目录一、函数模板1.1函数模板概念1.2 函数模板格式1.3 函数模板的原理1.4 函数模板的实例化二、类模板2.1 类模板的定义格式2.2类模板的实例化总结一、函数模板 1.1函数...
    99+
    2024-04-02
  • 详解C#中委托的概念与使用
    目录委托的概念多播委托拖动按钮委托的概念 委托这个名字取的神乎其神的,但实质是函数式编程,把函数作为参数传递给另一个参数。对于C语言程序员来说,就是把函数指针当作参数传递给另一个函数...
    99+
    2023-02-27
    C#委托使用 C#委托
  • C语言 超详细总结讲解二叉树的概念与使用
    目录1.二叉树的概念及结构 2.二叉树链式结构的实现1.二叉树的概念及结构  ①概念:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别...
    99+
    2024-04-02
  • C++特殊类设计概念与示例讲解
    目录一、设计模式概念二、设计一个不能被拷贝的类三、设计一个只能在堆上创建对象的类3.1 私有构造3.2 私有析构四、设计一个只能在栈上创建对象的类五、设计不能被继承的类六、单例模式6...
    99+
    2023-05-17
    C++特殊类设计 C++设计模式
  • C++模板参数的具体概念是什么
    这篇文章给大家介绍C++模板参数的具体概念是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++编程语言是一个功能强大的计算机应用语言,它的出现在一定程度上大大降低了开发人员的负担,提高了开发效率。我们在这里先来了...
    99+
    2023-06-17
  • C++类模板与函数模板基础详细讲解
    目录函数模板类模板总结函数模板 当我们想要定义一个可以支持泛型的函数时,就要采用函数模板的方式了。所谓泛型就是可以支持多种类型的操作,比如我们定义一个compare操作,他可以根据传...
    99+
    2022-11-13
    C++类模板 C++函数模板
  • C++图文并茂分析讲解模板
    目录1.内容引入2.模板函数C语言写交换函数C++写交换函数模板交换函数的语法及其原理语法原理理解显示实例化和隐式实例化关于编译器也是懒人这件事3.类模板1.内容引入 ​ 不知道大家...
    99+
    2024-04-02
  • C++浅析内存分区模型概念与示例
    目录初识C++内存分区模型程序运行前内存分区代码示例初识C++内存分区模型 在了解内存分区之前,我们先来聊一聊为什么要进行内存分区。在进行了内存分区之后,在不同的区域存放的数据,会有...
    99+
    2024-04-02
  • Python模板的使用详细讲解
    目录一 模板语法传值二 过滤器三 标签四 自定义模板标签和过滤器4.1 自定义过滤器4.2 自定义标签函数4.3 自定义inclusion_tag五 模板的继承六 模板的导入一 模板...
    99+
    2024-04-02
  • C++深入探究继承的概念与使用
    目录1、概念及定义1.1 概念1.2 定义2、class与struct的区别3、赋值兼容规则4、继承中的作用域问题5、派生类(子类)的默认成员函数5.1 构造函数5.2 拷贝构造函数...
    99+
    2024-04-02
  • C++适用入门同学的模板讲解
    目录1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.4.1显式实例化2.4.2 隐式实例化2.5 模板参数的匹配...
    99+
    2024-04-02
  • RocketMQ消费幂概念与使用分析
    目录一、什么是消费幂等二、消息重复的场景分析三、如何实现消费幂等一、什么是消费幂等 幂等:如果有一个操作,多次执行与一次执行所产生的影响是相同的,我们就称这个操作是幂等的。 基于上述...
    99+
    2023-02-13
    RocketMQ消费幂等 RocketMQ幂等消费设计
  • Java单例模式与破坏单例模式概念原理深入讲解
    目录什么是单例模式饿汉式(预加载)懒汉式(懒加载)反射破坏单例模式什么是单例模式 经典设计模式又分23种,也就是GoF 23 总体分为三大类: 创建型模式结构性模式行为型模式 Jav...
    99+
    2023-02-21
    Java单例模式 Java破坏单例模式
  • C++非类型类模板参数的基本概念是什么
    C++非类型类模板参数的基本概念是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++编程语言已经出现就立即引起了开发人员的注意,它具有C语言的所用功能,并...
    99+
    2023-06-17
  • C++ 超详细梳理继承的概念与使用
    目录继承的概念及定义继承的概念继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员复杂的菱...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作