C++初阶--类型模板

这篇具有很好参考价值的文章主要介绍了C++初阶--类型模板。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

泛型编程

先看一个例子:
C++初阶--类型模板,C++初阶,c++,算法,开发语言
这是一些对于Swap重载的函数,区别是类型不同;
虽然能够重载使用,但代码复用率比较低,如果我们让别人直接调用我们的函数,只使用整形类型的Swap(),那么其他函数就有点浪费了;
而且代码的维护性比较低,一个出错可能会导致重载都出错。

所以在C++中,就有了模板的概念。
类似于你给一个普通模板,填入不同的数据,然后进行套用;
在编程中我们称之为泛型编程

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

模板可以分类为:
C++初阶--类型模板,C++初阶,c++,算法,开发语言

函数模板

函数模板是实现泛型编程的一种方式。通过函数模板,可以编写一种通用的函数,可以适用于多种类型的数据,可以在不同的上下文中进行重复使用。

语法格式:
template < typrname T >
返回值类型 函数名(参数列表)
{
函数内容
}

在上述格式中,template < typrname T > 表示定义了一个模板,T是一个占位符类型,它可以代表任何类型。

使用

#include<iostream>
using namespace std;

template<typename T>
void Swap(T& left, T& right)
{
	T temp = left;
	left = right;
	right = temp;
}

//模板的演示
int main()
{
	int a = 1, b = 2;
	double c = 1.2, d = 3.4;

	Swap(a, b);
	Swap(c, d);

	return 0;
}

C++初阶--类型模板,C++初阶,c++,算法,开发语言

注意:C++初阶--类型模板,C++初阶,c++,算法,开发语言

C++初阶--类型模板,C++初阶,c++,算法,开发语言

C++初阶--类型模板,C++初阶,c++,算法,开发语言

通用加法函数

template<class T>
T Add(T a, T b)
{
	return a + b;
}

int main()
{
	int a = 1, b = 2;
	cout<<Add(a, b)<<endl;
	double c = 1.2, d = 2.4;
	cout << Add(c, d) << endl;

//显示实例化
	cout<<Add<int>(1, 2)<<endl;
	cout<<Add<double>(2, 3.44)<<endl;
	return 0;
}

C++初阶--类型模板,C++初阶,c++,算法,开发语言

实例化
C++初阶--类型模板,C++初阶,c++,算法,开发语言

注意
C++初阶--类型模板,C++初阶,c++,算法,开发语言
我们可以使用多模板参数。

多模板参数

template<class X,class Y>
void func(const X& x, const Y& y)
{
	cout << x <<" " << y << endl;
}


//多模板参数
int main()
{
	func(1, 2.2);
	func(1, 1);
	func(2.2, 2.2);
}

C++初阶--类型模板,C++初阶,c++,算法,开发语言

必须用实例化

template<class T>
T* f(int n)
{
	T* p = new T[n];
	return p;
}

C++初阶--类型模板,C++初阶,c++,算法,开发语言

函数模板的原理

当你使用函数模板进行函数调用时,编译器会根据传入的参数类型来确定需要实例化的模板参数类型。编译器会查找匹配的模板定义,并将实际的参数类型替换为函数参数类型,生成对应的函数代码。

类模板

template<class T1, class T2, ..., class Tn>
class 类模板名
{
 // 类内成员定义
};

使用

template<class T>
class Stack
{
private:
	T* _a;
	int _top;
	int _capacity;
public:
	Stack(int capacity = 4)
		:_a(new T[capacity]),
		_top(0),
		_capacity(capacity)
	{
		cout << "Stack(int capacity = 4)" <<endl;
	}

	~Stack()
	{
		cout << "~Stack()" << endl;

		delete[] _a;
		_a = nullptr;
		_top = 0;
		_capacity = 0;
	}
};

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

	return 0;
}

C++初阶--类型模板,C++初阶,c++,算法,开发语言

注意事项

C++初阶--类型模板,C++初阶,c++,算法,开发语言
C++初阶--类型模板,C++初阶,c++,算法,开发语言文章来源地址https://www.toymoban.com/news/detail-755824.html

到了这里,关于C++初阶--类型模板的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++之模板初阶

    💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 函数重载的缺点 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数 代码的可维护性比较低,一个出错可能所有

    2024年02月08日
    浏览(42)
  • C++——模板(初阶) + string

    作者:几冬雪来 时间:2023年5月19日 内容:C++模板 + string讲解 目录 前言: 1.模板:  1.函数模板的隐/显示实例化:  2.类模板: 2.STL:  1.  什么是STL:  2.STL六大组件:  3.string类:  结尾:  在上一篇博客我们结束了动态管理的讲解,并且在最后的时候我们引出了下一个学

    2024年02月05日
    浏览(48)
  • C++——模板初阶

    前言: 本章我们将学习 模板 ,正式接触泛型编程。 C++ 相比于 C 语言有这么多丰富的接口与类型,都源于泛型编程。本章的内容为模板初阶知识,为接下来的 STL 学习打下坚实的基础。 如何实现一个通用的交换函数( swap )呢?我们已经学过函数重载的使用,函数重载在这

    2024年02月06日
    浏览(74)
  • C++初阶(十七)模板进阶

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 模板参数

    2024年02月03日
    浏览(28)
  • C++:模板初阶

    本篇文章主要对模板有个简单的认识,方便我们后面对模板进行更加深入的学习。 目录 1.泛型编程 2.函数模板 2.1 函数模板的概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3.类模板 3.1 类模板的格式定义 3.2 类模板的实例化 如何实现一

    2024年02月08日
    浏览(26)
  • <C++> 四、模板初阶

    泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。 如何实现一个通用的交换函数呢?使用 函数重载 可以实现 使用函数重载虽然可以实现,但是有一下几个不好的地方: 重载的函数仅仅是类型不同,代码 复用率 比较 低 ,只要有新类

    2023年04月12日
    浏览(28)
  • C++模板初阶

    使用函数重载虽然可以实现,但是有一下几个不好的地方: 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数 代码的可维护性比较低,一个出错可能所有的重载均出错 那能否告诉编译器一个模子,让编译器根据不同的类

    2024年02月08日
    浏览(35)
  • 【C++初阶】八、初识模板(泛型编程、函数模板、类模板)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】七、内存管理 (C/C++内存分布、C++内存管理方式、operator new / delete 函数、定位new表

    2024年02月04日
    浏览(32)
  • 【C++初阶】想要编译器为你干活吗?来试试模板吧(模板初阶)

    我们之前都写过交换函数Swap,例如这样的: 如果要交换其它的类型该怎么办呢? 那只能当个CV工程师了,然后再修修改改,但是如果有很多类型呢?后期又需要改动该怎么办呢?一个一个函数的改吗?多个功能相同的函数,又会使程序 可读性降低,代码冗余 。 我们能用一

    2024年02月06日
    浏览(31)
  • 【C++初阶】内存管理 && 初识模板

    C/C++的内存分布主要分为 栈区、堆区、数据段和代码段,还有内存映射段。 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包