C++的类模板

2023-11-12

1.类模板基本语法

template<class TypeName,class TypeAge>
class Person
{
public:
	Person(TypeName name, TypeAge age)
	{
		this->name = name;
		this->age = age;
	}
	void Show()
	{
		cout << "name:" << this->name << endl;
		cout << "age:" << this->age << endl;
	}
	TypeName name;
	TypeAge age;
};

void test01()
{
	Person<string, int> p("Tom", 20);//(实例化)在此指定希望的数据类型
	p.Show();
}

2.类模板与函数模板的区别

<1>类模板没有自动类型推导,因此调用时必须显式地定义数据类型

template<class TypeName,class TypeAge>
class Person
{
public:
	Person(TypeName name, TypeAge age)
	{
		this->name = name;
		this->age = age;
	}
	void Show()
	{
		cout << "name:" << this->name << endl;
		cout << "age:" << this->age << endl;
	}
	TypeName name;
	TypeAge age;
};

void test01()
{
    //Person<> p("Tom", 20);隐式指定类型,CPP无法推出所属类型。必须显式指定数据类型
	Person<string, int> p("Tom", 20);
	p.Show();
}

<2>类模板中可以有默认数据类型,而函数模板则不可以
 

template<class TypeName,class TypeAge = int>//在此指定了TypeAge的默认参数
class Person
{
public:
	Person(TypeName name, TypeAge age)
	{
		this->name = name;
		this->age = age;
	}
	void Show()
	{
		cout << "name:" << this->name << endl;
		cout << "age:" << this->age << endl;
	}
	TypeName name;
	TypeAge age;
};

void test01()
{
	Person<string> p("Tom", 20);//因为第二个数据类型已经指定,所以调用时可以不用显式声明数据类型
	p.Show();
}

3.类模板中的成员函数的创建时机

在一开始定义类模板时,成员函数不进行创建;只有在实例化一个对象的时候指定T的数据类型,类模板的成员函数才进行创建。

class c1
{
public:
	void showFunc1()
	{
		cout << "showFunc1()的调用" << endl;
	}
};
class c2
{
public:
	void showFunc2()
	{
		cout << "showFunc2()的调用" << endl;
	}
};

template<class T>
class myClass
{
public:
	T temp;
	void show1()
	{
		temp.showFunc1();
	}
	void show2()
	{
		temp.showFunc2();
	}
};

void test01()
{
	myClass<c1> p;//在此指定T的数据类型之后,成员函数才进行创建
	p.show1();
	//p.show2();
}

4.类模板与子类继承

template<class T1,class T2>
class Base
{
public:
	Base(T1 name, T2 age)
	{
		this->name = name;
		this->age = age;
	}

	Base()
	{
		this->name = "Tom";
		this->age = 20;
	}
    T1 name;
    T2 age;
};

class Children2 :public Base<string, int>//子类在继承类模板时,必须指定类模板中的成员变量的数据类型
{
public:

};

template<class T1,class T2>
class Children1 :public Base<T1,T2>//如果不指定父类模板的成员变量的数据类型,子类也要写成类模板
{
public:
	
};

5.类模板的成员函数的类外实现

template<class T1,class T2>
class Person
{
public:
	Person(T1 name, T2 age);
	void showPerson();
	T1 name;
	T2 age;
};
template<class T1,class T2>//在类外实现成员函数时,每个成员函数的实现都需要加上模板声明
Person<T1, T2>::Person(T1 name, T2 age)//Person后必须要有<>,强调其是模板类,否则和一般的类无异
{
	this->name = name;
	this->age = age;
}
template<class T1, class T2>//在类外实现成员函数时,每个成员函数的实现都需要加上模板声明
void Person<T1, T2>::showPerson()//Person后必须要有<>,强调其是模板类,否则和一般的类无异
{
	cout << "姓名:" << this->name << " 年龄:" << this->age << endl;
}
void test01()
{
	Person<string, int> p("Bob", 18);
	p.showPerson();
}

6.类模板与友元函数

如果一个全局函数作为一个类模板的友元函数,那么这个全局函数也必须是函数模板

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++的类模板 的相关文章

随机推荐

  • Android 关于NestedScrollView与RecyclerView的滑动冲突的最终解决方案

    最近做项目的时候发现一个小问题 当NestedScrollView嵌套RecyclerView的时候回出现种种不适 网上给出的解决方案 比如去除RecyclerView的滑动事件 修改NestedScrollView或者RecyclerVi
  • TensorFlow 框架(contrib) - TensorFlow图形编辑器(contrib)

    TensorFlow 框架 contrib TensorFlow 框架工具 tf contrib framework assert same float dtype tf contrib framework assert scalar tf
  • pandas某一列中每一行拆分成多行的方法

    在处理数据过程中 常会遇到将一条数据拆分成多条 比如一个人的地址信息中 可能有多条地址 既有家庭地址也有工作地址 还有电话信息等等类似的情况 实际使用数据的时候又需要分开处理 这个时候就需要将这一条数据进行拆分成多条 以方便使用 在pand
  • Mybatis-Plus中update更新操作用法

    目录 一 前言 二 update 1 关于修改的4个条件构造器 2 UpdateWrapper 用法示例 3 LambdaUpdateWrapper 用法示例 4 UpdateChainWrapper 用法示例 5 LambdaUpdate
  • 志愿者打卡器服务器无响应,【转发】“志愿者打卡器”普及贴

    原标题 转发 志愿者打卡器 普及贴 首先欢迎各位加入建院志愿者的大家庭 在这里 我们真实地接触社会 我们付出热忱和真心 但是 你们的汗水不会白流 你们的时间也不会白白付出 你们的无私奉献也会得到相应的回报 在建院 任何形式的志愿活动都可以累
  • xss-labs通关大合集

    漏洞原理 看这里哇 目录 xss labs level1 level2 level3 level4 level5 level6 level7 level8 level9 level10 level11 level12 level13 lev
  • 虚拟服务器本地ssd型,云服务器本地ssd型

    云服务器本地ssd型 内容精选 换一换 若您对扩展的云服务器的规格有特殊的要求 可通过使用新模板创建伸缩配置 可按照您的需求配置新模板的规格参数 使得伸缩组内云服务器的规格均符合创建新模板的规格 登录管理控制台 选择 计算 gt 弹性伸缩
  • Python实现PP图和QQ图的应用

    Python实现PP图和QQ图的应用 在数据可视化领域 PP图和QQ图常常被用作数据研究和分析的工具 PP图 Probability Probability plot 和QQ图 Quantile Quantile plot 是由概率论和统计
  • Qt中的坐标系统

    1 坐标系统 GUI操作系统都有特定的坐标系统 图形界面程序在坐标系统中进行窗口和部件的定位 定位类型 顶级窗口部件的定位 窗口内部件的定位 窗口部件的大小设置 Qt使用统一的坐标系统定位窗口部件的位置和大小 Qt部件提供成员函数在坐标系统
  • T-SQL语句添加约束

    语法 ALTER TABLE 表名 ADD CONSTRAINT约束名约束类型 具体的约束声明 约束名的取名规则推荐采用 约束类型 约束列 当然你也可以不这么命名 这样单纯是比较方便 如 主键 Primary Key 约束 PK UserI
  • python爬虫Request

    1 先确定是否为动态加载网站 2 找URL规律 3 正则表达式 xpath表达式 4 定义程序框架 补全并测试代码 1 request是什么 Requests是用python语言基于urllib编写的 采用的是Apache2 License
  • AVPlayer耳机插拔

    AVPlayer耳机插拔暂停播放 耳机插拔监听 NSNotificationCenter defaultCenter addObserver self selector selector audioRouteChanged name AVA
  • Qt4代码移植Qt5时的 QTcpServer 64位 BUG

    原Qt4上接口代码如下 void QTcpServer incomingConnection int socketDescriptor 移植到Qt5后 BUG现象就是 用MinGW32位编译出来的程序 QTcpServer工作正常 但用Mi
  • 最新uniapp大佬级应用整理,谁说uniapp做不出好东西是小儿科

    最近经济 就业都不太好 在家躺平各位i兄弟看过来了 大佬从不抱怨环境 给大家整理几款uniapp神级作品 1 舒尔他方格听说过吧 可以锻炼思维和反应速度 免费开源要不要 下载地址 https ext dcloud net cn plugin
  • ARM DS5调试记录(1)安装&调试介绍

    一 安装说明 说明 安装文档已经把相应的细节介绍得很清楚了 这里主要是就之前安装遇到的问题和解决办法进行记录 1 安装虚拟网卡时 出现 系统资源不足 无法满足所需的服务 目前没有太好的解决办法 我是通过系统还原解决的 后面 有更好的解决办法
  • Arduino(三)——按钮控制数码管

    本节 我们学习一下内容 1 用按键控制数码管从1 9显示 然后再清零 2 外部中断函数 1 我们先来看下面的图 我们需要根据我们按键是否连通来连接我们的电路 所以我们连接好后就会是这样的 看完了连接图 接下来就要看我们的任务了 也就是让数码
  • 通达信公式破解

    通达信公式破解 通达信股票公式的导入方法 http blog sina com cn s blog 7f809c880102vk1n html 1 你下载到公式文件 XXXXX tne 后 保存或复制一份到桌面 或 我的文档 或你喜欢存放的
  • 控制工程学习4

    一 一阶系统的单位阶跃响应 单位跃阶 a起决定作用 在单位跃阶中时间常数t 等于a分之一的时候x 0 63 时间常数为系统特有 在稳定时间即4倍时间常数则等于0 98 二 非零初始条件下的传递函数 当t 0时即x 0 输入有两项为u s 和
  • 2024秋招海康威视前端笔试大题笔经

    文章目录 杂谈 大题及大致解析 论述题 1 html和htmls的区别 2 什么是深拷贝 什么是浅拷贝 如何实现 编程题 1 大人小孩排队 2 数组内是否存在 nums i nums j t 且 i j k 杂谈 考得不是很难 一开始进去会
  • C++的类模板

    1 类模板基本语法 template