当前位置: 首页 > news >正文

西南科技大学C++程序设计实验十(函数模板与类模板)

一、实验目的

1. 掌握函数模板与类模板;

2. 掌握数组类、链表类等线性群体数据类型定义与使用;

二、实验任务

1. 分析完善以下程序,理解模板类的使用:

(1)补充类模板声明语句。

(2)创建不同类型的类对象,使用时明确其数据类型?

_template<typename T>____________________ //声明类模板

 class A

 {

  public:

     A(T t){ this->t = t; }

     T &getT(){ return t;}

 void printAA(){cout<<t;}

 private:

     T t;  //类中数据成员类型参数化

 };

 void main()

 {

   //模板中如果定义了构造函数,则遵守以前的类的构造函数的调用规则

    ___A<int> a(1)_______________; //创建数据成员是整型的基类对象a

    a.getT();

    a.printAA();

   __A<double> b(1.1); ________________; //创建数据成员是double类型的的基类对象b

   ______ b.getT();

    b.printAA();____________; //输出对象b的信息

}

实验思考题回答与结果分析:

(1)程序运行结果:1和1.1。

(2)该程序主要运用.........知识点?编程时需要注意什么?(不要抄袭!

该程序主要运用了模板类的知识点。需要注意的是,使用模板类时需要在类名称后面加上尖括号<>,并在其中指定数据类型,即类实例化。同时,在创建对象时需要明确其数据类型,并传递相应的构造函数参数。

  1. 设计一个分数类 CFraction,再设计一个求数组中最大值的函数模板,并用该模板求一个 CFmction 数组中的最大元素

   参考代码:

#include <iostream>

using namespace std;

//分数类

class CFraction {

    int numerator, denominator;   //分子分母

public:

    CFraction(int n, int d) :numerator(n), denominator(d) { };

    bool operator <(const CFraction & f) const

    {//为避免除法产生的浮点误差,用乘法判断两个分数的大小关系

        if (denominator * f.denominator > 0)

            return numerator * f.denominator < denominator * f.numerator;

        else

            return numerator * f.denominator > denominator * f.numerator;

    }

    bool operator == (const CFraction & f) const

    {//为避免除法产生的浮点误差,用乘法判断两个分数是否相等

        return numerator * f.denominator == denominator * f.numerator;

    }

    friend ostream & operator <<(ostream & o, const CFraction & f);

};

template <class T> //声明函数模板

T MaxElement(T a[], int size) //定义函数体

{

   //函数功能:找出数组中的最大值

   

..............  //补充代码

}

ostream & operator <<(ostream & o, const CFraction & f) //重载 << 使得分数对象可以通过cout输出

{

    ________________________; //补充代码,输出"分子/分母" 形式

    return o;

}

int main()

{

    int a[5] = { 1,5,2,3,4 };//定义整数数组

    CFraction f[4] = { CFraction(8,6),CFraction(-8,4),

        CFraction(3,2), CFraction(5,6) };//定义分数类数组对象

    ___________________________;//调用模板函数MaxElement输出整数数组a的最大值

  __________________________________; //调用模板函数MaxElement和重载运算符函数”<<”输出分数数组对象的最大值

    return 0;

}

程序代码:

#include <iostream>

using namespace std;

//定义分数类

class CFraction {

public:

    CFraction(int numerator = 0, int denominator = 1) : m_numerator(numerator), m_denominator(denominator) {}

    int getNumerator() const { return m_numerator; }

    int getDenominator() const { return m_denominator; }

private:

    int m_numerator;   //分子

    int m_denominator; //分母

};

//定义比较函数模板

template<typename T>

T getMax(T arr[], int n) {

    T maxVal = arr[0];

    for (int i = 1; i < n; i++) {

        if (arr[i] > maxVal) {

            maxVal = arr[i];

        }

    }

    return maxVal;

}

int main() {

    CFraction arr[] = { CFraction(3,4), CFraction(2,5), CFraction(7,8) };

    cout << "The maximum fraction is: " << getMax(arr, 3).getNumerator() << "/" << getMax(arr, 3).getDenominator() << endl;

    return 0;

}

实验思考题回答与结果分析:

  1. 程序运行结果:

  1. 该程序主要运用.........知识点?编程时需要注意什么?(不要抄袭!

在上面的例子中,我们首先定义了一个CFraction类来表示分数,然后定义了一个求最大值的函数模板getMax(),其中arr[]表示待比较的数组,n表示数组元素个数,返回值为最大值。在main函数中,我们创建了一个CFraction类型的数组,并调用getMax()模板函数来获取最大值。

  1. 定义链表模板类,使其具备插入结点,输出结点等功能,现要求:(1)创建链表(2)从键盘输入一个待查找整数,在链表中查找该数,找到后修改;(3)遍历链表。

   参考代码:

//定义结点模板类

template <class T> //前置申明模板类

 class Node //定义一个Node

{

public:

Node(T _value) //构造函数

{

value = _value;

next = NULL;

}

public:

T value; //结点数据域

Node *next; //结点指针域,指向后继结点

} ;

 //定义链表模板类

template <class T> //申明模板类

 class List //定义List

{

public:

List()

{

ptr_head=NULL; //初始化链表头结点

ptr_tail=NULL; //初始化链表尾结点

相关文章:

西南科技大学C++程序设计实验十(函数模板与类模板)

一、实验目的 1. 掌握函数模板与类模板; 2. 掌握数组类、链表类等线性群体数据类型定义与使用; 二、实验任务 1. 分析完善以下程序,理解模板类的使用: (1)补充类模板声明语句。 (2)创建不同类型的类对象,使用时明确其数据类型? _template<typename T>__…...

Python 解析JSON实现主机管理

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它以易于阅读和编写的文本形式表示数据。JSON 是一种独立于编程语言的数据格式&#xff0c;因此在不同的编程语言中都有对应的解析器和生成器。JSON 格式的设计目标是易于理解、…...

一体化污水处理设备材质怎么选

在环保意识日益增强的今天&#xff0c;污水处理设备成为城市建设过程中的重要环节。而选择合适的一体化污水处理设备材质&#xff0c;则成为了一项重要的决策。本文将从专业的角度出发&#xff0c;为您解析一体化污水处理设备材质的选取。 首先&#xff0c;一体化污水处理设备材…...

德国进口高速主轴电机在机器人上的应用及选型方案

随着机器人技术的日新月异&#xff0c;高速主轴电机在机器人领域的应用也日趋广泛。德国进口的SycoTec高速主轴电机&#xff0c;以其高转速、高精度、高刚度的特点&#xff0c;在机器人的切割、铣削、钻孔、去毛刺等加工应用中发挥着关键作用。 一、高速主轴电机的特点 SycoT…...

【软考中级——软件设计师】备战经验 笔记总结分享

考试成绩 我第一次备考是在2022 然后那时候取消了这次是第二次 靠前我一个月复习的看了以前的笔记 然后刷了七八道历年题目学习资料推荐 &#xff1a;zst——2021 b站链接自荐一下我的笔记 &#xff1a; 软考笔记专栏 视频确实很长 &#xff0c; 我的建议就是先看笔记 然后不会…...

146. LRU 缓存 --力扣 --JAVA

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回…...

【C++】POCO学习总结(十):Poco::Util::Application(应用程序框架)

【C】郭老二博文之&#xff1a;C目录 1、Poco::Util::Application 应用框架 1.1 应用程序基本功能 Poco::Util::Application是POCO实现的的应用程序框架&#xff0c;支持功能如下&#xff1a; 命令行参数处理配置文件初始化和关机日志 1.2 命令行程序和守护进程 POCO支持…...

探索医学影像:如何通过ROI灰度直方图和ROI区域方格图揭示隐秘细节?

一、引言 医学影像是现代医学诊断的重要手段&#xff0c;其中nrrd文件格式作为一种常见的医学影像数据存储方式&#xff0c;被广泛应用于各种医学影像设备和软件中。这种文件格式具有丰富的元数据信息&#xff0c;可以精确记录影像的空间位置、方向和尺度等信息&#xff0c;对于…...

SASS基本语法总结

SASS是CSS预处理器&#xff0c;简单来说&#xff0c;SASS是比CSS更高一级的语言&#xff0c;它拥有CSS不具备的语法&#xff0c;比如if条件控制 SASS的预处理器 SASS是一种无法被浏览器直接执行的语言&#xff0c;我们需要通过预处理工具&#xff08;可以理解为翻译工具&…...

【C++】简单工厂模式

2023年12月6日&#xff0c;周三下午 今天又学习了一次简单工厂模式 每多学习一次&#xff0c;都会加深对设计模式的理解 目录 什么是简单工厂模式简单工厂模式的优缺点举例说明 什么是简单工厂模式 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型…...

el-tree数据量过大,造成浏览器卡死、崩溃

el-tree数据量过大&#xff0c;造成浏览器卡死、崩溃 场景&#xff1a;树形结构展示&#xff0c;数据超级多&#xff0c;超过万条&#xff0c;每次打开都会崩溃 我这里采用的是引入新的插件虚拟树&#xff0c;它是参照element-plus 中TreeV2改造vue2.x版本虚拟化树形控件&…...

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…...

面向LLM的App架构——业务维度

这是两篇面向LLM的大前端架构的第一篇&#xff0c;主要写我对LLM业务的认知以及由此推演出的大前端架构。由于我是客户端出身&#xff0c;所以主要以客户端角度来描述&#xff0c;并不影响对前端的适用性。 对LLM的认知 基于Google对AGI的论文&#xff0c;AGI或者LLM一定会朝…...

ElasticSearch之cat plugins API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/plugins?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; name component version…...

【小米电脑管家】安装使用教程--非小米电脑

安装说明功能体验下载资源 Xiaomi HyperOS发布后&#xff0c;小米妙享电脑端独立版本也走向终点&#xff0c;最新的【小米电脑管家】将会内置妙享实现万物互联。那么本篇文章将分享非小米电脑用户如何绕过设备识别验证安装使用【小米电脑管家】实现万物互联 安装说明 1.解压文…...

视频讲解|基于多目标粒子群算法的配电网储能选址定容

1 主要内容 该视频为3012基于多目标粒子群算法的配电网储能选址定容matlab代码讲解内容&#xff0c;对应的资源下载链接为基于多目标粒子群算法的配电网储能选址定容&#xff0c;程序主要内容是&#xff1a;以系统节点电压水平&#xff08;电网脆弱性&#xff09;、网络损耗以…...

Android 13 - Media框架(22)- MediaCodec(三)

这一节开始我们将重新回到 MediaCodec 这一层来学习 buffer 的流转 status_t MediaCodec::dequeueOutputBuffer(size_t *index,size_t *offset,size_t *size,int64_t *presentationTimeUs,uint32_t *flags,int64_t timeoutUs) {sp<AMessage> msg new AMessage(kWhatDequ…...

git提交报错 fatal: LF would be replaced by CRLF in package-lock.json

报错 fatal: LF would be replaced by CRLF in package-lock.json 原因 git 在windows下&#xff0c;默认是CRLF作为换行符&#xff0c; git add 提交时&#xff0c;会检查文本中是否有LF 换行符&#xff08;linux系统&#xff09;&#xff0c;如果有则会告警&#xff0c; 所…...

卷积详解和并行卷积

ps&#xff1a;在 TensorFlow Keras 中&#xff0c;构建 Sequential 模型的正确方式是将层作为列表传递&#xff0c;而不是作为一系列单独的参数。 modelmodels.Sequential([layers&#xff0c;layers]) 而不是modelmodels.Sequential(layers&#xff0c;layers) 文章目录 卷积…...

c#生成二维码二维码中间添加定制LoGo

&#x1f680;介绍 &#x1f340;QRCoder是一个开源的.NET库&#xff0c;用于生成QR码&#xff08;Quick Response Code&#xff09;。这个库是用C#编写的&#xff0c;并且可以在.NET框架的各种版本上使用&#xff0c;包括.NET Framework, .NET Core, Mono, Xamarin等。QRCode…...

设计CPU功能的数字电路

实验目的(1)熟悉Multisim 电路仿真软件的操作界面和功能; (2)掌握逻辑电路综合设计,并采用仿真软件进行仿真。 实验内容1.试设计一个简易CPU功能的数字电路,实验至少要求采用4个74HC/HCT194作为4个存储单元(可以预先对存储单元存储数据),74HC283作为计算单元。请实现…...

在windows下编译libiconv库

libiconv是一个基于GNU协议的开源库,主要用于解决多语言编码处理转换等应用问题。在linux系统使用比较方便,但是windows下使用需要进行源码编译。这里我是使用libiconv的1.15版本源码和VS2019默认工具集配置进行编译。 首先需要用VS2019创建一个空项目,根目录为libiconv。 在…...

html,css,开发知识,调试知识

nget 方式提交 n使用 get 方式提交数据时&#xff0c;表单数据会附加在 URL 之后&#xff0c;由用户端直接发送至服务器&#xff0c;所以速度比 post 快&#xff0c;但缺点是数据长度不能太长。 npost 方式提交 n使用 post 时&#xff0c;表单数据是与 URL 分开发送的&#…...

Vulnerability: File Upload(Medium)--MYSQL注入

选择难度&#xff1a; 1.打开DVWA&#xff0c;并登录账户 2.选择模式&#xff0c;这里我们选择 文件上载的中级模式&#xff08;Medium&#xff09; 准备工作 1.在vsc里面写个一句话木马 2.下载BurpSuiteCommunit软件&#xff1a;百度搜索“burp suite官网” 下载地址www…...

短视频账号剪辑矩阵+无人直播系统源头开发

抖去推爆款视频生成器&#xff0c;通过短视频矩阵、无人直播&#xff0c;文案引流等&#xff0c;打造实体商家员工矩阵、用户矩阵、直播矩阵&#xff0c;辅助商家品牌曝光&#xff0c;团购转化等多功能赋能商家拓客引流。 短视频矩阵通俗来讲就是批量剪辑视频和批量发布视频&am…...

Python traceback模块:获取异常信息

异常对象提供了一个 with_traceback 用于处理异常的传播轨迹&#xff0c;查看异常的传播轨迹可追踪异常触发的源头&#xff0c;也可看到异常一路触发的轨迹。 下面示例显示了如何显示异常传播轨迹&#xff1a; class SelfException(Exception): passdef main():firstMethod() …...

单点登录方案调研与实现

作用 在一个系统登录后&#xff0c;其他系统也能共享该登录状态&#xff0c;无需重新登录。 演进 cookie → session → token →单点登录 Cookie 可以实现浏览器和服务器状态的记录&#xff0c;但Cookie会出现存储体积过大和可以在前后端修改的问题 Session 为了解决Co…...

HarmonyOS应用开发者基础认证考试(稳过)

判断题 ​​​​​​​ 1. Web组件对于所有的网页都可以使用zoom(factor: number)方法进行缩放。错误(False) 2. 每一个自定义组件都有自己的生命周期正确(True) 3. 每调用一次router.pushUrl()方法&#xff0c;默认情况下&#xff0c;页面栈数量会加1&#xff0c;页面栈支持的…...

日常开发日志

目录 1、idea开发服务启动的网页地址不显示前端样式&#xff1a; 2、java Date 与myibits 的空判断&#xff1a; 1、idea开发服务启动的网页地址不显示前端样式&#xff1a; idea开发时&#xff0c;tomcat启动的后端弹出的网页地址&#xff0c;呈现的网页没有样式&#xff0…...

【FMCW毫米波雷达设计 】 — FMCW波形

原书&#xff1a;FMCW Radar Design 1 引言 本章研究驱动FMCW雷达的主要波形:线性调频(LFM)波形。我们研究信号的行为及其性质。随后&#xff0c;本章讨论了匹配滤波理论&#xff0c;并研究了压缩这种波形的技术&#xff0c;特别是所谓的拉伸处理&#xff0c;它赋予FMCW雷达极…...