c++之模板初阶

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

c++之模板初阶

💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞

泛型模板

函数重载的缺点

  1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数
  2. 代码的可维护性比较低,一个出错可能所有的重载均出错
    //
    为了提高效率,编译器生成一个模板根据不同的类型来生成代码
    泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
    模板分为 类模板 和 函数模板

类模板

书写模式: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.模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

类模板

类模板一般用于显式实例化

类的实例化

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类

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()//这里 类型指定函数
{
	//.........
}

c++之模板初阶文章来源地址https://www.toymoban.com/news/detail-483137.html

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

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

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

相关文章

  • C++——模板初阶

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

    2024年02月06日
    浏览(74)
  • C++初阶--类型模板

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

    2024年02月05日
    浏览(31)
  • 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++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C++ 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 模板参数可分为类型形参和非类型形参。 类型形

    2024年01月18日
    浏览(22)
  • 【C++初阶】内存管理 && 初识模板

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

    2024年02月04日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包