谭毓银《程序设计》课内实验C++2014数学与应用数学曾悦034166学时)09群体类与群体数据的组织(4实验群体类与群体数据的组织)9章(第一、实验目的掌握函数模板与类模板。(1)(2)了解线性群体与群体数据的组织。二、实验任务9_1求绝对值的函数模板及其应用#include<iostream>usingnamespacestd;template<typenameT>Tfun(Tx){returnx<0?-x:x;}intmain(){intn=-5;doubled=-5.5;cout<<fun(n)<<endl;cout<<fun(d)<<endl;return0;}19_2函数模板的示例。#include<iostream>usingnamespacestd;//定义函数模板template<classT>voidoutputArray(constT*array,intcount){for(inti=0;i<count;i++)cout<<array[i]<<;cout<<endl;}intmain(){//主函数constintA_COUNT=8,B_COUNT=8,C_COUNT=20;int数组inta[A_COUNT]={1,2,3,4,5,6,7,8};//定义数组doubleb[B_COUNT]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8};//定义doublechar//定义数组charc[C_COUNT]=Welcometoseeyou!;cout<<aarraycontains:<<endl;调用函数模板//outputArray(a,A_COUNT);cout<<barraycontains:<<endl;outputArray(b,B_COUNT);//调用函数模板cout<<carraycontains:<<endl;//调用函数模板outputArray(c,C_COUNT);return0;}29_3类模板应用举例。#include<iostream>#include<cstdlib>usingnamespacestd;//结构体StudentstructStudent{intid;//学号floatgpa;//平均分};template<classT>classStore{//类模板:实现对任意类型数据进行存取private:Titem;//item用于存放任意类型的数据boolhaveValue;//haveValue标记item是否已被存入内容public:Store();//缺省形式(无形参)的构造函数TgetElem();//提取数据函数voidputElem(constTx);//存入数据函数};//以下实现各成员函数。template<classT>//缺省构造函数的实现Store<T>::Store():haveValue(false){}template<classT>//提取数据函数的实现TStore<T>::getElem(){//如试图提取未初始化的数据,则终止程序if(!haveValue){cout<<Noitempresent!<<endl;exit(1);//使程序完全退出,返回到操作系统。}itemreturnitem;//返回中存放的数据}template<classT>//存入数据函数的实现voidStore<T>::putElem(constTx){中已存入数值,表示置为将haveValue=true;//haveValuetrueitemitem将x值存入//item=x;}intmain(){Store<int>s1,s2;s1.putElem(3);s2.putElem(-7);cout<<s1.getElem()<<<<s2.getElem()<<endl;3Studentg={1000,23};Store<Student>s3;s3.putElem(g);cout<<Thestudentidis<<s3.getElem().id<<endl;Store<double>d;cout<<RetrievingobjectD...;cout<<d.getElem()<<endl;过程中导致程序终在执行函D.getElement(未经初始/由return0;}9_4动态数据类模板示//Array.h#ifndefARRAY_H#defineARRAY_H#include<cassert>//数组类模板定义template<classT>classArray{private:类型指针,用于存放动态分配的数组内存首地址T*list;//T数组大小(元素个数)intsize;//public:构造函数Array(intsz=50);//Array(constArray<T>a);//拷贝构造函数~Array();//析构函数使数组对象可以整体赋重载Array<T>operator=(constArray<T>rhs);//?值C++Array孜屝//Toperator[](inti);重载,使对象可以起到普通数组的作用版本运算符的??孜屝constconstToperator[](inti)const;普通数组类型的转换,使T*重载到operatorT*();//C++Array对象可以起到的作用4版本类型转换操作符的constoperatorconstT*()const;//到T*取数组的大小intgetSize()const;//修改数组的大小voidresize(intsz);//};构造函数//template<classT>Array<T>::Array(intsz){,应当非负//sz为数组大小(元素个数)assert(sz>=0);size将元素个数赋值给变量size=sz;//类型的元素空间个Tlist=newT[size];//动态分配size}析构函数//template<classT>Array<T>::~Array(){delete[]list;}拷贝构造函数//template<classT>Array<T>::Array(constArray<T>a){x取得数组大小,并赋值给当前对象的成员//从对象size=a.size;//为对象申请内存并进行出错检查nlist=newT[size];//动态分配个T类型的元素空间复制数组元素到本对象从对象X//for(inti=0;i<size;i++)list[i]=a.list[i];}rhs...