西南科技大学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; //初始化链表尾结点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows安装protoc、protoc-gen-go、protoc-gen-go-grpc

文章目录 一、 protoc二、protoc-gen-go三、protoc-gen-go-grpc 一、 protoc 1&#xff0c;下载&#xff1a;https://github.com/google/protobuf/releases 下载对应的protoc&#xff0c;注意选择windows 2&#xff0c;下好之后解压就行&#xff0c;然后把bin目录加入到环境…

找不到WMVCORE.dll怎么办?一键解决WMVCORE.dll缺失的详细方法分享

当打开软件时提示wmvcore.dll丢失&#xff0c;这可能是由于以下几个原因导致的&#xff1a; 系统文件损坏&#xff1a;wmvcore.dll是系统文件&#xff0c;可能会因为各种原因&#xff08;如病毒感染、系统错误、软件卸载等&#xff09;而损坏。 软件依赖问题&#xff1a;某些…

全面解析“由于找不到hid.dll,无法继续执行代码”的4个解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到hid.dll”。这个问题通常出现在尝试运行某个程序或访问某个设备时。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何解决呢&#xff1f;本文将详细介绍找不到hid.dll的解…

2023-12-10 LeetCode每日一题(爬楼梯)

2023-12-10每日一题 一、题目编号 70. 爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 示例 2&#xff1a; 提…

[CTFshow 红包挑战] 刷题记录

文章目录 红包挑战7红包挑战8红包挑战9 红包挑战7 考点&#xff1a;xdebug拓展 源码 <?php highlight_file(__FILE__); error_reporting(2);extract($_GET); ini_set($name,$value);system("ls ".filter($_GET[1])."" );function filter($cmd){$cmd s…

viple模拟器使用(五):Web 2D模拟器中实现两距离局部最优迷宫算法

关于两距离局部最优迷宫算法的原理本文不再赘述&#xff0c;详情请参考&#xff1a;viple模拟器使用&#xff08;四&#xff09;&#xff0c;归纳总结为&#xff1a; 前方有路&#xff0c;则直行&#xff1b; 前方无路&#xff0c;则右转90度&#xff0c;标记右转完成&#xff…

【Java 基础】29 序列化

文章目录 1.定义2.目的3.使用1&#xff09;序列化2&#xff09;反序列化 3.应用场景4.注意事项总结 1.定义 序列化&#xff08;Serialization&#xff09;是将对象的状态转换为字节流的过程&#xff0c;以便将其存储到文件、数据库或通过网络传输 说简单点&#xff0c;序列化就…

推荐一款好用的3D资产管理器(Connecter)

中文汉化版Connecter 3.0 软件的使用教程视频&#xff1a; 中文汉化版Connecter 3.0安装方法与简单的使用说明 软件下载地址&#xff1a;https://download.csdn.net/download/Highning0007/88615583

midwayjs从零开始创建项目,连接mikro-orm框架(必须有java的springboot基础)

前言&#xff1a; 我一直都是用java的springboot开发项目&#xff0c;然后进来新公司之后&#xff0c;公司的后端是用node.js&#xff0c;然后框架用的是 midwayjs &#xff0c;然后网上的资料比较少&#xff0c;在此特地记录一波 文档&#xff1a; 1.官方文档&#xff1a;介绍…

前端 Web Workers 简介

简介 以前我们总说&#xff0c;JS 是单线程没有多线程&#xff0c;当 JS 在页面中运行长耗时同步任务的时候就会导致页面假死影响用户体验&#xff0c;从而需要设置把任务放在任务队列中&#xff1b;执行任务队列中的任务也并非多线程进行的&#xff0c;然而现在 HTML5 提供了…

【C++】C++中的String类详解及模拟实现示例

文章目录 string类简介string类的基本用法string类的常用方法string类的优势 string类的模拟实现存储结构头文件string.h源文件string.cpp源文件test.cpp string类简介 string类简介在C编程中&#xff0c;字符串是一种非常常见的数据类型&#xff0c;用于存储文本信息。C标准库…

win11 CUDA(12.3) + cuDNN(12.x) 卸载

win11 CUDA&#xff08;12.3&#xff09; cuDNN&#xff08;12.x&#xff09;卸载 信息介绍卸载 信息介绍 本文是对应 win11RTX4070Ti 安装 CUDA cuDNN&#xff08;图文教程&#xff09; 的卸载 卸载 控制面板 --> 程序 --> 卸载程序 卸载掉图中红框内的&#xff0c…