c++远征之模板篇——函数模板、类模板

以下内容源于慕课网的学习整理,如有侵权,请告知删除。



函数模板(vs模板函数)


1、为什么需要模板?

  • 函数体相同,只是类型不一样而已。
  • 那么能否把数据的类型当做参数传递呢?肯定是可以的,这是模板。


2、关键字:template,typename,class

  • 后二者的作用是一样的





  • 变量作为模板的参数:


  • 多参数函数模板,typename和class可以混用


  • 函数模板与重载





类模板

1、为什么需要类模板?

  • 原因和函数模板一样,整体相同,而数据类型(一般指数据成员的数据类型,或者成员函数的返回参数类型、函数体中的数据的类型)不同。


2、使用举例

  • 函数实体定义在类外时的写法。
  • 定义在类内时,和普通的成员函数没有任何区别。
  • 注意,写在类外的函数,需要使用template<typename T>

 





3、模板代码不能分离编译

  • 不能分别写在.h .cpp


4、代码示例

#include <iostream>
using namespace std;/*** 定义一个矩形类模板Rect* 成员函数:calcArea()、calePerimeter()* 数据成员:m_length、m_height*/
template<typename T>
class Rect
{
public:Rect(T length,T height);T calcArea();T calePerimeter();
public:T m_length;T m_height;
};/*** 类属性赋值*/
template<typename T>
Rect<T>::Rect(T length,T height)
{m_length = length;m_height = height;
}/*** 面积方法实现*/
template<typename T>
T Rect<T>::calcArea()
{return m_length * m_height;
}/*** 周长方法实现*/
template<class T>
T Rect<T>::calePerimeter()
{return ( m_length + m_height) * 2;
}int main(void)
{Rect<int> rect(3, 6);cout << rect.calcArea() << endl;cout << rect.calePerimeter() << endl;return 0;
}




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++远征之模板篇——标准模板库(STL)

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 常见的设计模板 1、vector&#xff0c;向量 &#xff08;1&#xff09;本质是对数组的封装&#xff1b; &#xff08;2&#xff09;能够在常数时间内完成读取&#xff1b; &#xff08;3&#xf…

数据结构探险——队列篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、什么是队列&#xff1f; &#xff08;1&#xff09;先入先出的模型&#xff08;FIFO&#xff09;。 &#xff08;2&#xff09;队头&#xff0c;队尾。 &#xff08;3&#xff09;细分为普通队…

数据结构与算法之冒泡排序

转载于:https://www.cnblogs.com/yakun/p/3634457.html

数据结构探险——栈篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、栈要素 栈底&#xff08;不变&#xff09;、栈顶&#xff08;随着入栈和出栈而改变&#xff09; 2、栈机制的实现 &#xff08;1&#xff09;栈的相关机制 判断栈的空满&#xff1b;入栈、出栈…

windows下修改tomcat的startup.bat脚本文件后台运行

1、修改startup.bat文件 rem Get remaining unshifted command line arguments and save them in the set CMD_LINE_ARGS :setArgs if ""%1"""""" goto doneSetArgs set CMD_LINE_ARGS%CMD_LINE_ARGS% %1 shift goto setArgs :doneSet…

开源框架:CocoaPods 安装学习教程

转载 开源框架:CocoaPods 引言: CocoaPods是一个可以帮你集中管理第三方库的开源项目,运行在Ruby的环境下,基于GitHub托管优势,你可以很方便的查阅目前依赖于CocoaPods的资源. 并且,CocoaPods是可靠,稳定,安全的.可以为你在使用第三方库资源时节省大部分的配置和部署时间.更专心…

SESSION 回收机制

session.gc_maxlifetime session.gc_probability session.gc_divisor session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc&#xff08;garbage collection 垃圾回收&#xff09;进程的概率。此概率用 gc_probability/gc_divisor 计算得来…

数据结构探险——线性表篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、线性表 概念 机制的实现 2、顺序表 构造函数、析构函数 清空线性表&#xff0c;判空 求当前线性表长度&#xff0c;获取某个序号的元素 定位某个元素的位置 找前驱&#xff08;找后驱类似的&…

Mysql优化之执行计划查看

我们经常说到mysql优化&#xff0c;优化中一种常见的方式就是对于经常查询的字段创建索引。那么mysql中有哪些索引类型呢&#xff1f; 一、索引分类1、普通索引&#xff1a;即一个索引只包含单个列&#xff0c;一个表可以有多个单列索引 2、唯一索引&#xff1a;索引列的值必须…

jmeter+Fiddler:通过Fiddler抓包生成jmeter脚本

Fiddler是目前最常用的抓包工具之一&#xff0c;它作为客户端和服务器端之间的代理&#xff0c;记录客户端和服务器之间的所有请求(http/https)&#xff0c;可以针对特定的请求过滤&#xff0c;分析请求和响应的数据、设置断点、调试、修改请求的数据&#xff0c;甚至可以修改服…

数据结构探险——树篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 树存在概念中&#xff0c;是对数组或者链表的一种操作方式的概念。 一、与树有关的一些基础概念 &#xff08;1&#xff09;树 有限节点的集合&#xff1b; &#xff08;2&#xff09;度 某个节点的…

grub rescue的修复方法

2019独角兽企业重金招聘Python工程师标准>>> 在win7下删除了ubuntu的swap交换空间的分区&#xff08;大约6G左右&#xff0c;根据自己的实际分区情况决定&#xff09;。重新启动电脑进入界面&#xff0c;直接显示&#xff1a; error:unknow filesystemgrub rescue&g…

jmeter强大的扩展插件!!

jmeter4.0以上版本&#xff0c;如jmeter5.1.1版本的集成插件&#xff0c;只需要在官网下下载“plugins-manager.jar”包&#xff0c;放在jmeter安装路径的lib/ext目录下即可使用。&#xff08;但该jar包包含的插件&#xff0c;还不能满足所需的功能&#xff0c;如服务器系统资源…

数据结构探险——图篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、图的相关概念 2、图的存储结构 第一种是用数组表达&#xff0c;第二三种用链表来表示有向图&#xff0c;最后一种链表来表示无向图。&#xff08;1&#xff09;邻接矩阵&#xff08;有向无向都可…

jmeter+WebDriver:启动浏览器进行web自动化

无论是web自动化还是手机app自动化&#xff0c;WebDriver是Selenium的核心模块&#xff0c;jmeter WebDriver 仅支持Firefox、Chrome 和 HTML Unit驱动&#xff0c;暂不支持IE 驱动。 一、下载JMeterPlugins-WebDriver插件并配置分享我的网盘下载地址&#xff1a;https://pan.b…

LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)

鄙人不才&#xff0c;故收录LeetCode中的解法和代码。 题目&#xff1a; 参考解法&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { publi…

Linux基础(九)--定时任务

本文主要介绍了Linux中定时任务的相关知识。在日常中&#xff0c;有一些任务需要定时执行&#xff0c;例如&#xff1a;每天定时更新杀毒软件的数据库&#xff0c;每天定时执行数据清洗等脚本。这里就需要做定时任务。&#xff08;1&#xff09;概述在Linux中定时任务主要分为两…

【随感】tomorrow ,new semester ,finally i have time to read some books~

—————————youngLaker转载于:https://www.cnblogs.com/younglaker/archive/2012/12/30/2840129.html

LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)

题目&#xff1a; 参考解法&#xff1a; class Solution { public:string addStrings(string num1, string num2) {if (num1.size() < num2.size()) return addStrings(num2, num1);//这里并不是递归&#xff0c;只是为了使得第一个参数的长度是最大的int carry 0, i num1…

yum只下载软件不安装的两种方法

2019独角兽企业重金招聘Python工程师标准>>> 今天来说下在CentOS下下载软件&#xff0c;不安装的方法&#xff1a; 方法一&#xff1a;通过yum自带一个工具&#xff1a;yumdownloader [rootweb1 ~]# rpm -qa |grep yum-utils [rootweb1 ~]# yum -y install yum-ut…