当前位置: 首页 > 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…...

如何用4个PHP文件搭建跨平台音乐解析API

如何用4个PHP文件搭建跨平台音乐解析API 【免费下载链接】music-api Music API 项目地址: https://gitcode.com/gh_mirrors/mu/music-api 你是否曾为音乐平台间的会员壁垒而烦恼&#xff1f;想开发音乐应用却苦于没有统一的接口&#xff1f;music-api为你提供了完美的解…...

限流算法详解 - 滑动窗口算法深入理解

滑动窗口算法详解 专门针对滑动窗口算法&#xff0c;从原理到精确限流的实现细节做一个深入剖析。 一、核心思想 固定窗口在时间边界处会出现“计数突跳”&#xff0c;原因是窗口的边界是硬重置的&#xff08;0→1秒末清空&#xff0c;1→2秒初重新计数&#xff09;。 滑动窗口…...

区块链与计算机视觉融合:构建可信机器感知系统的架构与实践

1. 项目概述&#xff1a;当计算机视觉遇见区块链在人工智能的浪潮中&#xff0c;计算机视觉&#xff08;CV&#xff09;无疑是那颗最耀眼的明星之一。它让机器拥有了“看”和理解世界的能力&#xff0c;从医疗影像中精准定位病灶&#xff0c;到自动驾驶汽车识别路况&#xff0c…...

告别拥塞:手把手优化Dragonfly网络性能,UGAL-LVC_H算法详解与配置

告别拥塞&#xff1a;手把手优化Dragonfly网络性能&#xff0c;UGAL-LVC_H算法详解与配置 在数据中心网络架构中&#xff0c;Dragonfly拓扑以其高度可扩展性和低直径特性脱颖而出&#xff0c;成为超大规模计算环境的理想选择。然而&#xff0c;当面对对抗性流量模式时&#xff…...

暗黑破坏神2现代重生:D2DX宽屏高帧率完全配置指南

暗黑破坏神2现代重生&#xff1a;D2DX宽屏高帧率完全配置指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 作为一款诞生于…...

容器镜像加速实战:3种方案彻底解决国内拉取难题

容器镜像加速实战&#xff1a;3种方案彻底解决国内拉取难题 【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢&#xff0c;需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 项目地址: https://gitcode.com/GitHub_Trending/pu…...

3个核心优势:用AI智能体彻底解放你的桌面生产力

3个核心优势&#xff1a;用AI智能体彻底解放你的桌面生产力 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop 在数…...

如何高效使用开源视频下载插件:专业用户的终极指南

如何高效使用开源视频下载插件&#xff1a;专业用户的终极指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper VideoDownloadHelper是一款专为…...

AssetStudio Unity资源提取终极指南:精准解析SerializedFile与AssetBundle

1. 为什么AssetStudio是Unity资源提取的“第一把刀”——不是因为它最强&#xff0c;而是因为它最准你有没有遇到过这样的场景&#xff1a;刚下载一个热门Unity手游的APK&#xff0c;兴致勃勃地解包&#xff0c;结果在assets/bin/Data/Managed/目录下看到一堆Assembly-CSharp.d…...

抖音下载神器:3步轻松搞定无水印批量下载完整教程

抖音下载神器&#xff1a;3步轻松搞定无水印批量下载完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...