C++进阶(一)

函数模版(泛型编程)

为什么要有函数模版?
函数模版本质: 类型参数化

函数模版定义形式:

template <类型形式参数表>
类型形式参数形式为: typename T1, typename T2, … 或 class T1, class T2, …

函数模版声明:

template <类型形式参数表>
类型 函数名(形式参数表)
{
	语句序列
}
  • 函数模版定义由模版说明和函数定义组成
  • 模版说明的类属参数必须在函数定义中至少出现一次
  • 函数参数表中可以使用类属类型参数,也可以使用一般类型参数

template 告诉C++编译器, 开始泛型编程, 看到T,不报错

template <typename T>
void myswap(T &a, T &b) 
{
}

函数模版的调用

  • 显示类型调用
  • 自动类型推导

函数模版遇上函数重载

  • 函数模版不允许自动类型转化,普通函数能够进行自动类型转化
  • 普通函数的调用:可以进行隐式的类型转换
  • 函数模版函数的调用(本质:类型参数化):将严格的按照类型进行匹配,不会进行自动类型转换
template <typename T>
void myswap(T &a, T &b)
{
	T c = 0;
	c = a;
	a = b;
	b = c;
}

void myswap(int a, char c)
{
	cout << "a: " << a << endl;
}

void main()
{
	int a = 10;
	char c = "z";
	
}
  1. 函数模版可以做普通函数一样被重载
  2. C++编译器优先考虑普通函数
  3. 如果函数模版可以产生一个更好的匹配,那么选择模版
  4. 可以通过空模版实参列表的语法限定编译器只通过模版匹配

在这里插入图片描述

在这里插入图片描述

重载:发生在同一个作用域,同一个类
重写:父子类之间,一个虚函数产生多态,不是虚函数重写则发生重定义

思考:为什么函数模版可以和函数重载放在一起,C++编译器是如何提供函数模版机制的?
答:
1、编译器并不是把函数模版处理成能够处理任意类型的函数
2、编译器从函数模版通过具体类型产生不同的函数
3、编译器会对函数模版进行两次编译,在声明的地方对模版代码本身进行编译;在调用的地方对参数替换后的代码进行编译。

编译器编译原理
在这里插入图片描述
在这里插入图片描述

本资源是压缩包形式的, 里面包含 本书,里面是pdf格式的, 带书签目录,本书是完整版的。 资源都是我自己用过的,不骗大家。 本书作者: 肖俊宇 吴为胜; 出版社: 电子工业出版社 内容简介: 《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》是C++语言的入门教程,较为系统地介绍了C++语言的基础内容。本书共分为3篇22章,详细介绍了C++语言的基础知识、面向对象、标准模块、底层开发和综合案例。本书循序渐进地讲述了C++的基础知识、C++程序的组成及其开发过程、C++程序中的数据、表达式和语句、控制程序流程、数组与字符串、指针与引用、使用函数函数模板、错误和异常处理、宏和预编译、面向对象的开发、封装、继承、多态、类模板、文件流、标准模板库STL和编程实践等内容。 《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》涉及面广,从基本知识到高级内容和核心概念,再到综合案例,几乎涉及C++开发的所有重要知识。本书适合所有想全面学习C++开发技术的人员阅读,尤其适合没有编程基础的C++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于C++语言开发爱好者,本书也有较大的参考价值。 章节目录: 第1篇 C++基础篇 第1章 C++概述 1 1.1 引言 1 1.1.1 C++的历史沿革 1 1.1.2 入门C++ 2 1.1.3 编程思想的转变 3 1.2 C++概述 4 1.2.1 C++的特征 5 1.2.2 C与C++的比较 5 1.2.3 C++的应用领域 6 1.3 C++源程序的组成 6 1.3.1 基本组成元素 7 1.3.2 标识符 8 1.3.3 保留字 8 1.3.4 符号 8 1.4 C++集成开发环境——DEV-C++ 9 1.4.1 选择C++编译器 9 1.4.2 安装DEV-C++ 10 1.4.3 DEV-C++ IDE简介 11 1.5 第一个C++程序——Hello World 11 1.5.1 创建源程序 11 1.5.2 编译运行 13 1.6 小结 14 1.7 习题 14 第2章 变量与数据类型 18 2.1 常量和变量 18 2.1.1 常量 18 2.1.2 变量 21 2.1.3 变量的定义及赋值 22 2.1.4 变量的应用示例 24 2.2 基本数据类型 25 2.2.1 基本数据类型概述 25 2.2.2 整型数据类型 26 2.2.3 浮点型数据类型 27 2.2.4 字符型数据类型 29 2.2.5 布尔型数据类型 30 2.3 变量的作用域 31 2.4 类型转换 32 2.4.1 隐式转换 32 2.4.2 显式转换 33 2.5 小结 34 2.6 习题 34 第3章 表达式与语句 39 3.1 运算符 39 3.1.1 运算符概述 39 3.1.2 算术运算符 40 3.1.3 自增和自减运算符 42 3.1.4 赋值运算符 43 3.1.5 关系运算符 44 3.1.6 逻辑运算符 45 3.1.7 条件运算符 46 3.1.8 逗号运算符 47 3.1.9 位运算符 48 3.1.10 sizeof运算符 49 3.2 运算符的优先级和结合性 50 3.3 表达式 51 3.4 语句 53 3.4.1 空格的作用 53 3.4.2 语句块 54 3.4.3 赋值语句 55 3.4.4 空语句 56 3.5 小结 57 3.6 习题 57 第4章 流程控制结构之顺序结构 63 4.1 程序流程图 63 4.2 表达式语句 64 4.3 格式化输入/输出 65 4.3.1 标准输入流cin 65 4.3.2 标准输出流cout 66 4.3.3 输出流cerr和clog 68 4.4 格式控制函数 69 4.5 格式控制符 71 4.5.1 控制不同进制的输出 72 4.5.2 控制输出宽度 72 4.5.3 控制输出精度 73 4.6 顺序结构综合应用 74 4.7 小结 75 4.8 习题 75
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值