西南科技大學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.pswp.cn/news/211047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211047.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c-語言->數據在內存的存儲

系列文章目錄 文章目錄 系列文章目錄前言 前言 目的&#xff1a;學習整數在內存的儲存&#xff0c;什么是大小端&#xff0c;浮點數的儲存。 1. 整數在內存中的存儲 在講解操作符的時候&#xff0c;我們就講過了下?的內容&#xff1a; 整數的2進制表??法有三種&#xff0…

設計模式之觀察者模式(主題對象發生變化,通知各個觀察者)

當涉及到電商場景時&#xff0c;觀察者模式可以用于處理多種情況&#xff0c;比如訂單狀態更新、庫存變化、用戶積分變化等。下面是一個簡化的訂單狀態更新的觀察者模式案例。 1.首先&#xff0c;定義一個主題接口 OrderSubject /*** Description:主題&#xff0c;用于管理觀察…

基于Java會員管理系統

基于Java會員管理系統 功能需求 1、會員信息管理&#xff1a;該系統需要提供會員信息管理功能&#xff0c;包括會員的姓名、性別、年齡、聯系方式等基本信息。同時&#xff0c;還需要提供會員的消費記錄、積分、優惠券等信息的管理。 2、會員注冊和登錄&#xff1a;系統需要…

動手學習深度學習-跟李沐學AI-自學筆記(3)

一、深度學習硬件-CPU和GPU 芯片&#xff1a;Intel or AMD 內存&#xff1a;DDR4 顯卡&#xff1a;nVidia 芯片可以和GPU與內存通信 GPU不能和內存通信 1. CPU 能算出每一秒能運算的浮點運算數&#xff08;大概0.15左右&#xff09; 1.1 提升CPU利用率 1.1.1 提升緩存…

自動駕駛學習筆記(十六)——目標跟蹤

#Apollo開發者# 學習課程的傳送門如下&#xff0c;當您也準備學習自動駕駛時&#xff0c;可以和我一同前往&#xff1a; 《自動駕駛新人之旅》免費課程—> 傳送門 《Apollo 社區開發者圓桌會》免費報名—>傳送門 文章目錄 前言 匹配關聯 軌跡記錄 狀態預測 總結 前…

【文件上傳系列】No.2 秒傳(原生前端 + Node 后端)

上一篇文章 【文件上傳系列】No.1 大文件分片、進度圖展示&#xff08;原生前端 Node 后端 & Koa&#xff09; 秒傳效果展示 秒傳思路 整理的思路是&#xff1a;根據文件的二進制內容生成 Hash 值&#xff0c;然后去服務器里找&#xff0c;如果找到了&#xff0c;說明已經…

【智能家居】七、人臉識別 翔云平臺編程使用(編譯openSSL支持libcurl的https訪問、安裝SSL依賴庫openSSL)

一、翔云 人工智能開放平臺 API文檔開發示例下載 二、編譯openSSL支持libcurl的https訪問 安裝SSL依賴庫openSSL(使用工具wget)libcurl庫重新配置&#xff0c;編譯&#xff0c;安裝運行&#xff08;運行需添加動態庫為環境變量&#xff09; 三、編程實現人臉識別 四、Base6…

12.4每日一題(備戰藍橋杯順序結構程序設計)

12.4每日一題&#xff08;備戰藍橋杯順序結構程序設計&#xff09; 題目1000: 【入門】AB Problem題目描述輸入輸出樣例輸入樣例輸出來源/分類 題解 1000: 【入門】AB Problem題目 2124: 計算(ab)c的值題目描述輸入輸出樣例輸入樣例輸出來源/分類 題解 2124: 計算(ab)c的值題目…

UML案例分析

首先需要花大約20分鐘來思考解決這個問題&#xff0c;如果對問題不是很熟悉&#xff0c;也可以在完成題目之后&#xff0c;找相關的資料翻閱&#xff08;例如看UML類圖的基本情況&#xff0c;UML狀態圖的基本情況&#xff0c;然后結合這些信息 做一個自我評價&#xff0c;看這個…

matlab 最小二乘擬合空間直線(方法三)

目錄 一、算法原理1、算法過程2、參考文獻二、代碼實現三、結果展示四、相關鏈接博客長期更新,GPT與爬蟲自重,你也未必能爬到最新版本。 一、算法原理 1、算法過程 空間直線的點向式方程為:

poe與chatgpt那個功能更強大

在當前的人工智能領域&#xff0c;Poe Al Chat以其卓越的聊天能力和實用的功能&#xff0c;受到了大家的廣泛關注和喜愛。本文好為您個紹Poe Al Chat的功能&#xff0c;以及我們國內用戶如何進行充值訂閱。Poe Al Chat是一個基于OpenAl的GPT模型開發的人工智能聊天工具。它能夠…

基于Springboot的校園失物招領系統(有報告)。Javaee項目,springboot項目。

演示視頻&#xff1a; 基于Springboot的校園失物招領系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構…

Docker鏡像和容器的簡單操作

1.鏡像管理 搜索鏡像&#xff1a; 這種方法只能用于官方鏡像庫 搜索基于 centos 操作系統的鏡像 # docker search centos 按星級搜索鏡像&#xff1a; 查找 star 數至少為 100 的鏡像&#xff0c;默認不加 s 選項找出所有相關 ubuntu 鏡像&#xf…

為 setTimeout 或 setInterval 提供一個字符串作為第一個參數(js的問題)

首先&#xff0c;需要知道的是為 setTimeout 或 setInterval 提供一個字符串作為第一個參數&#xff0c;這本身并不是一個錯誤。它是完全合法的JavaScript代碼。這里的問題更多的是性能和效率的問題。很少有人解釋的是&#xff0c;如果你把字符串作為setTimeout或setInterval的…

46.0/基本的 HTML 標簽(詳細版)

目錄 46.1 標題 46.2 段落 Paragraph, 46.3 換行 46.4 HTML 注釋 46.5 空格 46.6 水平線 46.7 控制網頁中文字的標記 46.8 居中標記 46.9 預格式化文本 46.10 網頁背景 46.1 標題 標記解釋 標題使用 <h1> 至 <h6> 標簽進行定義。 <h1> 定…

uniapp如何制作一個收縮通訊錄(布局篇)

html&#xff1a; <view class"search"><view class"search_padding"><u-search change"search" placeholder"請輸入成員名稱" v-model"keyword"></u-search></view></view> <view…

C語言有哪些預處理操作?

C語言的預處理是在編譯之前對源代碼進行處理的階段&#xff0c;它主要由預處理器完成。預處理器是一個獨立的程序&#xff0c;它負責對源代碼進行一些文本替換和處理&#xff0c;生成經過預處理的代碼。以下是C語言預處理的一些重要特性&#xff1a; 1&#xff0c;頭文件包含 #…

Ansible中執行流控制

1.ansible中的迭代循環 創建目錄和文件 vim createfile.yaml - name: create file playbook hosts: all tasks: - name: create file file: path: "/mnt/{{item[name]}}" state: …

Unity 自定義窗口

放在Editor文件夾下&#xff1b; #if UNITY_EDITORusing System; using UnityEditor; using UnityEngine;namespace EditorCustumTool {/// <summary>/// 自定義窗口/// </summary>public class CustomWindow : EditorWindow{public enum FlagType{Flag1 101,Fl…

前端知識筆記(三十六)———HTTP 緩存機制

一、強制緩存 只要瀏覽器判斷緩存沒有過期&#xff0c;則直接使用瀏覽器的本地緩存而無需再請求服務器。 強制緩存是利用下面這兩個 HTTP 響應頭部&#xff08;Response Header&#xff09;字段實現的&#xff0c;它們都用來表示資源在客戶端緩存的有效期&#xff1a; Cache-…