C++基础(10)——函数模板和类模板

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

前言

本文主要介绍了C++中函数模板和类模板基本知识

6.1:函数模板

模板函数的定义

template<typename T>+函数的定义或声明

C++基础(10)——函数模板和类模板

模板函数的两种使用方法(编译器自动推测、显示指定T的类型)

C++基础(10)——函数模板和类模板

注意事项:模板一定要确定指出T的数据类型才可以使用;T由编译器自动推导出来,如果类型不一致也不可以使用

6.2:普通函数和模板函数的区别和调用规则

普通函数可以发生自动类型转换。模板函数如果使用自动类型推导不能发生自动类型转换;模板函数如果使用显示指定类型可以发生自动类型转换。

C++基础(10)——函数模板和类模板

普通函数和模板函数的调用规则

1:如果普通函数和模板函数重名且都可以调用,优先调用普通函数

C++基础(10)——函数模板和类模板

2:通过空模板的方式强制调用模板函数

C++基础(10)——函数模板和类模板

3:模板函数也可以发生重载

C++基础(10)——函数模板和类模板

4:如果模板函数可以产生更好的匹配,优先使用模板函数(防止普通函数的自动类型转换)

C++基础(10)——函数模板和类模板

6.3:模板函数的局限性(函数模板具体化)

模板函数传入的参数不是万能的,有一定的限制

C++基础(10)——函数模板和类模板

通过运算符重载可以实现自定义数据类型的比较

C++基础(10)——函数模板和类模板

也写一个指定T类型的模板函数,之后编译器会优先调用这个函数

C++基础(10)——函数模板和类模板

6.4:类模板概念和函数模板比较

类模板定义:

C++基础(10)——函数模板和类模板

类模板可以有默认参数类型

C++基础(10)——函数模板和类模板

使用类模板的时候要指定数据类型,编译器不会自己推导,模板函数会自己推导

C++基础(10)——函数模板和类模板

类模板中的成员函数不是在一开始就创建的,而是在运行的时候创建的

C++基础(10)——函数模板和类模板

6.5:类模板对象做函数的参数

 1:直接指定参数类型void func1(Person<string, int> &p) 

C++基础(10)——函数模板和类模板

 2:参数模板化

C++基础(10)——函数模板和类模板

打印一下T1,T2的类型typeid(T1).name()

C++基础(10)——函数模板和类模板

3:将整个类进行模板化

C++基础(10)——函数模板和类模板

6.6:类模板和继承

当子类继承的父类是一个模板函数时,要先指定T的类型,要不然编译器不知道给子类开辟多大的内存空间。同理父类模板想用sizeof打印大小时也需要先指定T的类型

C++基础(10)——函数模板和类模板

如果想灵活指定父类模板中T的类型,子类也需要模板化

C++基础(10)——函数模板和类模板

6.7:类模板的类外实现

C++基础(10)——函数模板和类模板

6.8:类模板的分文件编写和解决

将类的定义和成员函数的实现分开写,在调用模板类创建对象,使用类外实现的成员函数会报错,因为类的成员函数是在运行时才创建

main.cpp

C++基础(10)——函数模板和类模板

person.h

C++基础(10)——函数模板和类模板

person.cpp

C++基础(10)——函数模板和类模板

如果只调用类内实现的showName()函数是不会报错的

C++基础(10)——函数模板和类模板

因为main.cpp中只包含了person.h文件,main.cpp是不知道showAge()具体是怎么实现的,编译的时候会报错

C++基础(10)——函数模板和类模板

将类的定义和类成员函数放在同一个文件中,然后再main.cpp中进行包含就不会报错了

C++基础(10)——函数模板和类模板

person.hpp

C++基础(10)——函数模板和类模板

6.9:类模板和友元

1:全局友元函数类内实现

main.cpp

C++基础(10)——函数模板和类模板

person.hpp

C++基础(10)——函数模板和类模板

打印一下T1、T2数据类型

C++基础(10)——函数模板和类模板

2:全局函数类外实现

C++基础(10)——函数模板和类模板文章来源地址https://www.toymoban.com/news/detail-492487.html

总结

以上就是本文的全部内容,非常感谢你能看到这

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

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

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

相关文章

  • C++高级编程02-函数重载和类的封装

    目录 1、内联函数 2、函数的默认参数和占位参数 4、函数的重载  5、extern C 浅析 6、封装  内联函数引出---宏缺陷 宏缺陷: 必须要加括号保证运算完整 即使加括号,有些运算依然与预期结果不符 普通函数不会出现缺陷 C++提供 内联函数代替宏函数 inline 在函数声明和

    2024年02月12日
    浏览(27)
  • C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段: 基础篇、STL 篇、高阶数据结构与算法篇 ,相关重点内容如下: 基础篇 : 类与对象 (涉及C++的三大特性等); STL 篇 : 学习使用 C++ 提供的 STL 相关库 ; 高阶数据结构与算

    2024年02月06日
    浏览(52)
  • c++ list的主要函数

    assign() 给list赋值  back() 返回最后一个元素  begin() 返回指向第一个元素的迭代器  clear() 删除所有元素 empty() 如果list是空的则返回true  end() 返回末尾的迭代器  erase() 删除一个元素  front() 返回第一个元素  get_allocator() 返回list的配置器  insert() 插入一个元素到list中  max_si

    2024年02月13日
    浏览(73)
  • 本文通过实例介绍了Redis的基础知识、数据类型、数据结构以及典型应用场景 值得一看!

    作者:禅与计算机程序设计艺术 2017年,Redis是基于MIT许可发布的一个开源的高性能键值数据库,其开发语言为C语言。它提供了多种数据类型(strings、hashes、lists、sets、sorted sets等),分布式支持(可横向扩展),内存存储,持久化功能,事务处理功能等。作为一种高性能的

    2024年02月06日
    浏览(66)
  • Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装

    作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南,这里主要介绍 Docker 在 Linux 、 Windows 10 和 macOS 上的安装。 警告:切勿在没有配置 Docker APT 源的情况

    2024年01月20日
    浏览(63)
  • export 是一个在 Unix 和类 Unix 系统(比如 Linux 和 macOS)中常用的 shell 命令,主要用于设置或导出环境变量。

    export 是一个在 Unix 和类 Unix 系统(比如 Linux 和 macOS)中常用的 shell 命令,主要用于设置或导出环境变量。环境变量是在操作系统中用于存储系统设置和命令行程序配置的全局值。下面提供了一些 export 命令的基本用法和示例。 基本用法 设置环境变量 : 这里, VARIABLE_NAME 是

    2024年01月19日
    浏览(43)
  • 【C++】——模板(泛型编程+函数模板+类模板)

    之前我们学习了函数重载,让我们在写相似函数的时候非常方便,但函数重载还有很多不足的地方,比如,每次写相似函数的时候,都要我们重新重载一个逻辑、代码几乎一样的函数,这就导致了我们的效率变低,所以我们今天来学习C++模板的相关知识点,学习完模板之后,

    2024年02月05日
    浏览(45)
  • 浅述C++模板——函数模板及类模板

    模板作为 C++ 的一大特色,对于泛型编程有着重要的作用。同时,对于大规模类似的函数或是类型不确定的类,模板都起了至关重要的作用。 在开始学习模板之前,我们首先需要了解模板。先看下面一个例子: 我们可以轻易发现,对于函数 func_one、func_two,两者实现的功能基

    2024年02月09日
    浏览(43)
  • 【C++】什么是函数模板/类模板?

    函数模板简单来说就是一个模板,与函数参数的类型无关,是一个模子,不是真正的函数,实例化的函数会根据实参的类型 自动 推导类型。 函数模板是一个模板,并不是真正的函数,它是根据传递过来的实参的类型实例化一个具体的函数,相当于我们将重复的事情交给了编

    2024年02月07日
    浏览(55)
  • C++ 函数模板与类模板

    现在的C++编译器实现了C++新增的一项特性–函数模板。函数模板是通用的函数描述,也就是说它们使用泛型来定义函数,其中的泛型可以是具体的类型(如int或double)。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。用于模板允许以泛型的方式编写程序,因

    2023年04月19日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包