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++知识库 -> 自考2019版《C++程序设计》04747,第九章 函数模版与类模板(附课后习题答案) -> 正文阅读

[C++知识库]自考2019版《C++程序设计》04747,第九章 函数模版与类模板(附课后习题答案)

考试题型:主要在选择题、填空题,比分占3%左右。

第一节 函数模版

1、有时重载的两个函数逻辑功能基本一样,只是参数类型不同,几乎相同的代码要重复编写。

利用模版来减少重复编码工作。

模版是实现代码复用的一种工具,是参数多态的一种体现。

模版实现类型参数化,把类型定义为参数,实现代码的复用。

例如,编写3个函数分别求3个整形、3个字符型、3个浮点型数的最大值。

功能是相同的,只是类型不同。

2、由于函数在设计时没有使用实际的类型,而是使用虚拟的类型参数,故其灵活性得到加强,当用实际的类型来实例化这种函数时,就好像按照模板来制造新的函数一样,所以称这种函数为函数模版。

将函数模版与某个具体数据类型连用,就产生了模版函数,又称这个过程为函数模版实例化,这种形式就是类型参数化。

3、函数模板的声明和使用

函数模板将很多个不同数据类型、相同逻辑功能的函数抽象成一个统一的函数。

template<class T>或<typename T>

返回类型函数名(参数表)

{

??? 函数体

}

(1)template是定义函数模版的关键字,总是放在模板定义和声明的最前面

(2)<class T>或<typename T>必须用尖括号“<>”括起来,其中,T为类型参数,T实际上是一个虚拟的类型名。当使用函数模板时,T就会被替换为某种实际的数据类型(例如,int、char、float等)

(3)后面函数的定义方式与之前提到的普通函数的定义方式类似


第二节 类模版

1、类模板的定义和使用

类模板的作用:用户可以定义一种模式,使得类中的某些成员变量、成员函数的参数、返回值等都能取任意类型。

例如,声明两个类,分别用来比较整数和浮点数的大小。

2、类模版的一般定义格式如下:

template <class T>

class 类名

{

}

(1)template是定义模板的关键字,宗师放在模板定义和声明的最前面

(2)class T>必须用尖括号“<>”括起来,T为类型参数,被替换为某种实际的数据类型(例如,int、char、float等)从而实现一类多用

(3)类的定义方式与之前讲到的类的定义方式类似

(4)类模板是对一组类的抽象,某一个类是对类模板的实例化

3、类模板格式:

类模板名<实际类型名>? 对象名(参数表);

例:编写一个类模板,比较两个整数、浮点数和字符数据的大小

#include<iostream>
using namespace std;

template<class T>??? //声明类模板,虚拟类型名为T
class Compare??? //类模板名为Compare
{
    Private:?
        T x,y;??? //数据类型暂定为T
    public:
        Compare(T a,T b)??? //构造函数
        {
???         x=a;
            y=b;
        }
        T max()??? //函数返回类型暂定为T
        {
???         return (x>y)?x:y;
        }
        T min()??? //函数返回类型暂定为T
        {
?        ?? return (x<y)?x:y;
        }
}
int main()
{
    Compare<int> cmpi(4,9);??? //定义对象cmpi,比较整数
    cout<<“两个整数的最大值:”<<cmpi.max()<<endl;
    cout<<“两个整数的最小值:”<<cmpi.min()<<endl;
    Compare<float> cmpf(3.93,7.78);??? //定义对象cmpf,比较浮点数
    cout<<“两个浮点数的最大值:”<<cmpf.max()<<endl;
    cout<<“两个浮点数的最小值:”<<cmpf.min()<<endl;
    Compare<char> cmpc(‘k’,’p’);??? //定义对象cmpc,比较字符
    cout<<“两个字符的最大值:”<< cmpc.max()<<endl;
    cout<<“两个字符的最小值:”<< cmpc.min()<<endl;
}

4、类模型注意:

(1)声明类模板时,要在类的前面加一行语句:template<class T>

(2)用类模板定义对象时用以下格式:Compare<int> cmpi;或Compare<int> cmpi(4,9);

(3)如果在类模板外定义成员函数,应写成类模板形式:

template<class 虚拟类型参数>

函数类型类模板名<虚拟类型参数>: :成员函数名(函数形参)


课后习题答案:

一、选择题

1-5、DCBAB? 6-7、BC?

二、填空题

(1)

template<class T>
T TestClass<T>::getData(形参表)
{
    //函数体;
}

三、程序填空题

1、

T max()

2、

T a    
T b
这里运行会报错是因为题目最下面函数名重复了,把第二个add改成1就能运行了

3、

T *a,int n
T t=0

四、程序分析题

1、

s1 与 s2不相等
s3 与 s4相等

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:45:54  更:2022-03-31 23:48:42 
 
开发: 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 1:35:42-

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