IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++笔记-模板 -> 正文阅读

[C++知识库]C++笔记-模板

为什么要有模板?

模板的目的时为了提高复用性,将类型参数化

函数模板

  • 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表

  • 语法:

    template<typename T>? ?(或class T)

    函数声明或定义

?有两种使用方法

?

  • 自动类型推导
  • 显示指定类型

  • ?普通函数和函数模板的区别:

  1. 普通函数可以发生自动类型转换(如把char类型转换成int类型)
  2. 函数模板用自动类型推导,不可以发生隐式类型转换
  • 普通函数与函数模板调用规则

  1. 优先调用普通函数
  2. 可以通过空模板参数列表来强制调用函数模板
空模板参数列表:myAdd<>(a, b) 

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

????????4.如果函数模板可以产生更好的匹配,优先调用函数模板

类模板

建立一个通用类,类中的成员 ?数据类型可以不具体制定,用一个虚拟的类型来代表

语法同函数模板

类模板与函数模板区别

  1. 类模板没有自动类型推导的使用方式
  2. 类模板在模板参数列表中可以有默认参数

?

?

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

普通类里的成员函数一开始就可以创建

类模板中的成员函数在调用时才可创建

类模板对象做函数参数

三种传入方式

  • 指定传入的类型-----直接显示对象的数据类型
4.	template<class T1,class T2>
5.	class Person {
6.	public:
7.		T1 name;
8.		T2 age;
9.		Person(T1 name, T2 age) {
10.			this->name = name;
11.			this->age = age;
12.		}
13.	
14.		void show() {
15.			cout << this->name << "  " << this->age;
16.		}
17.	};
18.	
19.	void test(Person<string, int>p) {
20.		p.show();
21.	}
22.	
23.	int main() {
24.		Person<string, int>p("小a", 100);
25.		test(p);
26.	}

?

2.参数模板化----将对象中的参数变为模板进行传递

template<class T1 ,class T2>
void test(Person<T1,T2>&p) {
p.show();
}

?

3.整个类模板化----将这个对象类型模板化进行传递

template<class T>
void test(T &p) {
p.show();
}

类模板与继承

当子类继承的父类是一个类模板时,子类在声明的时候,要指出父类中T的类型

如果不指定,编译器无法给子类分配内存

如果想灵活指定出父类中T的类型,子类也需变为类模板

?

?

类模板成员函数类外实现

?

template<class T1,class T2>

Person<T1,T2>::funcName(T1 a,T2 b)

{
}

?类模板分文件编写

问题:类模板中成员函数的创建时机是在调用阶段,导致分文件编写时连接不到

解决方式:

  1. 直接包含.cpp源文件
  2. 将.h和.cpp中的内容写到一起,并更改后缀名为.hpp

类模板与友元

  1. 全局函数类内实现-直接在类内声明友元即可
  2. 全局函数类外实现-需要提前让编译器知道全局函数的存在:加空模板参数列表,且把声明放到前边
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:12:27  更:2021-10-18 17:14:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:08:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码