版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
employl0]=new
Manager(10135,"ChengShaoHua",1200);employ[1
]=n
ewManager(10201,"Yan
HaiFeng",5300);employl2]=new
HourlyWorker(30712,"ZhaoXiaoMing",5,8*20);employ|3]=newHourlyWorker(30649,"GaoDongSheng",4.5,10*30);employl4]=new
PieceWorker(20382,"Xiu
LIWeɪ",利用多态性employl5]
=new
PieceWorker(20496,"Huang
Dong
访问不同派生类成员函数
cout<<setiosflags(ios:fixed|ios::showPoint)<<setprecision(2);for(i=0;i<5;i++)employli→>print();for(i=0;i<5;i++)cout<<employli]->getName()<<""<<
employli->earnings()
<<endl;华南理工大学计算机学院周霭如2025void
test2(){
Employee*employ[6];int
i;例9-9
用指针数组构造异质数组
EmployeePieceWorkerHourWorkerManager//Employee.hclass
Employee
Manager{public:Employee(constlong,constchar*);virtual~Employee();const
char*getName()const;constlonggetNumber()const;virtualdoubleearnings()const=0;virtual
void
print()const;Employee*next;protected:long
number;char*name;};例9-10
动态异质链表
EmployeeHourWorker
PieceWorker华南理工大学计算机学院周霭如2025const
char*getName()const;constlonggetNumber()const;virtualdoubleearnings()const=0;virtual
void
print()const;Employee
*next;
//
增加一个指针成员protected:long
number;char*name;};//Employee.hclass
Employee{public:Employee(constlong,constvirtual~Employee();例9-10
动态异质链表
EmployeeManagerchar*);华南理工大学计算机学院周霭如2025PieceWorkerHourWorkervoidAddFront(Employee*&h,Employee*&t)//
在表头插入结点{t->next=h;h=t;}voidtest3()
//测试函数{Employee*empHead=NULL,*ptr;ptr=new
Manager(10135,"Cheng
ShaoHua",1200);//建立第一个结点AddFront(empHead,ptr);//插入表头ptr=
new
HourlyWorker(30712,"Zhao
XiaoMing",5,8*20);
//
建立第二个结点AddFront(empHead,ptr);//插入表头ptr
=new
PieceWorker(20382,"Xiu
LiWei",0.5,2850);
/1建立第三个结点AddFront(empHead,ptr);//插入表头ptr=empHead;while(ptr){ptr->print();ptr=ptr->next;}
//
遍历链表,输出全部信息ptr
=empHead;while(ptr)
//
遍历链表,输出姓名和工资{cout<<ptr->getName()<<""<<ptr->earnings()<<endl;ptr
=ptr->next;}华南理工大学计算机学院周霭如2025ptr=new
HourlyWorker(30712,"Zhao
XiaoMing",5,8*20);二个结点AddFront(empHead,ptr);//
插入表头ptr=newPieceWorker(20382,"XiuLiWei",0.5,2850);
立第三个结点AddFront(empHead,ptr);//插入表头ptr=empHead;while(ptr){ptr->print();ptr=ptr->next;}
//
遍历链表,
输出全部信息ptr=empHead;while(ptr)
//
遍历链表,输出姓名和工资{cout<<ptr->getName()<<""<<ptr->earnings()<<endl;ptr=ptr->next;{Employee*empHead=NULL,*ptr;不同类型的结点ptr=newManager(10135,"ChengShaoHu2,1200
万AddFront(empHead,ptr);//插入表头{t->next=h;h=t;}void
test3()
//测
试函数
它们是voidAddFront(Employee*&h,Employee*&t)
//
在表头插入结点华南理工大学计算机学院周霭如2025洁点ptr=empHead;
while(ptr
){ptr->print();ptr=ptr->next;}
//
遍历链表,输出全部信息ptr=empHead;while(ptr)
//
遍历链表,输出姓名和工资{cout<<ptr->getName()<<""<<ptr->earnings()<<endl;ptr=ptr->next;{t->next=h;h=t;}void
test3()//测
试函数{Employee*empHead=NULL,*ptr;ptr=newManager(10135,"ChengShaoHua",1200);
建立第一个结点AddFront(empHead,ptr);ptr=new
HourlyWorker(30712,ZhaoAddFront(empHead,ptr);ptr=new
PieceWorker(20382,"XiuAddFront(empHead,ptr);
//
插入表头
使用基类指针遍历链表LiWe,voidAddFront(Employee*&h,Employee*&t)
//
在表头插入结点个结点个结点华南理工大学计算机学院周霭如2025//插入表头华南理工大学计算机学院周霭如2025虚函数和多态性使软件设计易于扩充。派生类重载基类接口相同的虚函数其虚特性不变。如果代码关联在编译时确定,称为静态联编。代码在运行时关联称为动态联编。>基类指针可以指向派生类对象、基类中拥有虚函数,是支持多态性的前提。>虚析构函数可以正确释放动态派生类对象的资源。纯虚函数由派生类定义实现版本。具有纯虚函数的类称为抽象类。抽象类只能作为基类,不能建立对象。抽象类指针使得派生的具体类对象具有多态操作能力。华南理工大学计算机学院周霭如2025华南理工大学计算机学院周霭如2025华南理工大学计算机学院周霭如2025模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。第10章模板第10章
模
板10.1
什么是模板10.2
函数模板10.3
类模板
小结10.1
什么是模板类
属——类型参数化,又称参数模板使得程序(算法)可以从逻辑功能上抽象,把被处理的对象
(数据)类型作为参数传递C++提供两种模板机制:
函数模板类模板华南理工大学计算机学院周霭如202510.1什么是模板模板(函数模板和类模板)模板函数
模板类对象模板、类、对象和函数华南理工大学计算机学院周霭如2025华南理工大学计算机学院周霭如202510.2
函数模板考虑求两参数之中大值函数:
max
(a,
b)对
a,b
的不同类型,都有相同的处理形式:return(a>b)?a:b;用已有方法解决对不同数据类型处理:(1)
宏替换
#
definemax(a,b)(a>b?a:b)
问
题
避开类型检查(2)
重载问
题
需要许多重载版本(3)
使用函数模板华南理工大学计算机学院周霭如202510.2
函数模板重载函数通常基于不同的数据类型实现类似的操作对不同数据类型的操作完全相同,用函数模板实现更为简洁方便华南理工大学计算机学院周霭如202510.2.1
模板说明声明模板中使用的类属参数。形式为template
<
类型形式参数表>华南理工大学计算机学院周霭如202510.2.1
模板说明声明模板中使用的类属参数。形式为template
<类型形式参数表>关键字华南理工大学计算机学院周霭如202510.2.1
模板说明声明模板中使用的类属参数。形式为template
<
类型形式参数表>类型形式参数的形式为:typename
T₁,typename
T₂,
…
…
,
typename
Tn或
classT₁,
class
T₂,
…
…
,class
Tn华南理工大学计算机学院周霭如202510.2.1
模板说明声明模板中使用的类属参数。形式为template<
类型形式参数表>关键字类型形式参数的形式为:typename
T₁,typenameT₂,
…
…,
typenameTn或
classT₁,class
T₂,
…
…,
class
Tn华南理工大学计算机学院周霭如202510.2.1
模板说明声明模板中使用的类属参数。形式为template<
类型形式参数表>类属参数类型形式参数的形式为:typenameT₁
typename
T₂,
…
…
,typename
Tnclass
T₁classT₂,
…
…
,classTn华南理工大学计算机学院周霭如2025或10.2.1
模板说明声明模板中使用的类属参数。形式为template<
类型形式参数表>例如template<typename
T>template<typenameElementType>template<typename
NameType,typenameDateType>华南理工大学计算机学院周霭如202510.2.2函数模板与模板函数函数模板声明template
<
类型形式参数表>类型函数名(形式参数表){
语句序列}>函数模板定义由模板说明和函数定义组成>模板说明的类属参数必须在函数定义中至少出现一次函数参数表中可以使用类属类型参数,也可以使用一般类型参数华南理工大学计算机学院周霭如2025例10-1
简单函数模板应用#include<iostream>using
namespace
std;template<typename
T>T
Max(const
T
a,const
Tb){return
a>b?a:b;}int
main(){cout
<<"Max(3,5)is"<<Max(3,5)<<endl;cout<<"Max('y','e')is"<<Max('y','e')<<endl;cout<<"Max(10.3,0.5)is"<<Max(10.3,0.5)<<endl;}华南理工大学计算机学院周霭如2025{return
a>b?a:b;int
main(){cout<<"Max(3,5)is"<<Max(3,5)<<endl;cout<<"Max('y','e')is"<<Max('y','e')<<endl;cout<<"Max(10.3,0.5)is"<<Max(10.3,0.5)<<endl;J#include<iostream>using
namespace
std;template
<typename
T>T
Max(const
Ta,
const
Tb)例10-1
简单函数模板应用华南理工大学计算机学院
周霭如2025template<typename
T>T
Max(constTa,
constTb)
由实参类型实例化
{return
a>b?a:b;int
main(){cout<<"Max(3,5)is"<<
Max(3,5)
×<endl;cout<<"Max('y','e')is"<<Max('y','e')<<endl;cout<<"Max(10.3,0.5)is"<<Max(10.3,0.5)<<endl;int
max(int
a,intb){return
a>b?a:b;}#include<iostream>using
namespace
std;例10-1
简单函数模板应用华南理工大学计算机学院周霭如2025int
max(int
a,intb){return
a>b?a:b;}char
max(char
a,char
b){return
a>b?a:b;}Tb)由实参类型实例化int
main(){cout<<"Max(3,5)is"<<Max(3.5)<<endl;cout<<"Max('y','e')is"<<Max('y','e')<endl;cout<<"Max(10.3,0.5)is"<<Max(10.3,0.5)<<endl;}#include<iostream>using
namespace
std;template<typename
T>T
Max(const
Ta,
const
{return
a>b?a:b;例10-1
简单函数模板应用华南理工大学计算机学院周霭如2025a,int
b)a>b?a:b;}char
max(char
a,char
b){return
a>b?a:b;}double
max(double
a,double
b){return
a>b?a:b;}》由实参类型实例化int
max(int#include<iostream>{returnusing
namespace
std;template<typename
T>T
Max(const
Ta,
const
Tb){return
a>b?a:b;int
main(){cout
<<"Max(3,5)is"<<Max(3,5)<<endl;cout<<"Max('y','e')is"<<Max('y','e')<<endl;cout<<"Max(10.3,0.5)is"<<
Max(10.3,0.5)<endl;
}例10-1
简单函数模板应用华南理工大学计算机学院周霭如2025C:\
WINDOWs\system32\cmd.exe
□回×
Max(3,5)is
5Max('
y','e')is
yMax(10.3,0.5)is
10.3请按任意键继续
..
.int
main(){cout<<"Max(3,5)is"<<Max(3,5)<<endl;cout<<"Max('y','e')is"<<Max('y','e')<<endl;cout<<"Max(10.3,0.5)is"<<Max(10.3,0.5)<<endl;#include<iostream>using
namespace
std;template<typename
T>T
Max(const
Ta,
const
{return
a>b?a:b;double
max(double
a,double
b)
{return
a>b?a:b;}int
max(int{returnTb)程序执行时匹配不同的版本char
max(char
a,char
b){return
a>b?a:b;}编译器生成的
模板函数例10-1
简单函数模板应用a,int
b)a>b?a:b;}华南理工大学计算机学院周霭如2025例10-2
冒泡排序法的函数模板template<typename
ElementType>void
SortBubble(ElementType*a,int
size){inti,work;ElementType
temp;for(int
pass
=1;pass<size;pass
++){work=1;for(i=0;i<size-pass;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work
=0;}if(work)break;}华南理工大学计算机学院周霭如2025例10-2
冒泡排序法的函数模板template
<typename
ElementType>void
SortBubble(ElementType*a,int
size){inti,work;ElementType
temp;for
(int
pass
=1;pass<size;pass
++){work=1;for(i=0;i<size-pass;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;workif(work)break;}模板声明=0;}华南理工大学计算机学院
周霭如2025例10-2
冒泡排序法的函数模板template<typename
ElementType>void
SortBubble(ElementType*a
,intsize){inti,work;ElementType
temp;for(int
pass
=1;pass<size;pass
++){work=1;for(i=0;i<size-pass;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;workif(work)break;类属参数=0;}华南理工大学计算机学院周霭如2025例10-2
冒泡排序法的函数模板普通类型参数template<typename
ElementType>void
SortBubble(ElementType*a,int
size){inti,work;ElementType
temp;for(int
pass
=1;pass<size;pass
++){work=1;for(i=0;i<size-pass;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;work
=0;}if(work)break;}华南理工大学计算机学院周霭如2025template
<typename
ElementType>void
SortBubble(ElementType*a,int
size){int
i,work;ElementType>elementType
*a
,
int
siElementType
temp;for(int
pass
=1;pass<size;pass
++){work=1;for(i=0;i<size-pass;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;workif(work)break;}类属类型变量=0;}例10-2
冒泡排序法的函数模板华南理工大学计算机学院周霭如2025例10-2
冒泡排序法的函数模板template<typename
ElementType>void
SortBubble(ElementType*a,int
size){inti,work;ElementType
temp;for(int
pass=1;
pass<size;pass
++){
work
=1;for(i=0;i<size-pass;i++)if(a[i]>a[i+1]){temp=ali];al[i]=a[i+1];a[i+1]=temp;work
=0;}
if(work)break;华南理工大学计算机学院周霭如2025排序算法模板类型不能提供类型的隐式转换//ok/l
ok//
error,
无法匹配//errortemplate<typename
T>T
max(T
a,T
b){return
a>b?a:b;}void
f(int
i,char
c){max(i,i);max(c,c);max(i,c);max
(c,i);10.2.3
重载函数模板有些特殊情况需要函数模板参与重载例
如华南理工大学计算机学院周霭如202510.2.3
重载函数模板template<typename
T>T
max(T
a,T
b){returna>b?a:b;}int
max
(inta,cheurb)
//
模板函数重载版本{return
a>b?a:b;}voidf(inti,charc){max(i,i);max(c,c);max(i,c);max(C,
i)
;//ok/l
ok/l
ok//
ok
,
由系统提供隐式转换华南理工大学计算机学院周霭如2025#include<iostream>using
namespace
std;#include
<string.h>template
<typename
T>例10-3重载函数模板示例T
Max(const
T
a,const
Tb){return
a>b?a·b;}template
<typename
T>T
Max(const
Ta,const
Tb,const
T
c){Tt;t=Max(a,b);return
Max(t,c);}函数模板int
Max(const
int
a,const
char
b){return
a>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<Max(3,'a')<<endl;cout<<"Max(9.3,0.5)is"<<Max(9.3,0.5)<<endl;cout<<"Max(9,5,23)is"<<Max(9,5,23)<<endl;华南理工大学计算机学院周霭如2025using
namespace
std;template
<typename
T>TMax(constTa,const
Tb){returna>b?a:b;}template<typenameT>T
Max(const
T
a,const
Tb,const
Tc){Tt;t=Max(a,b);return
Max(t,c);}int
Max(const
int
a,const
char
b){returna>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<Max(3,'a')<<endl;cout<<"Max(9.3,0.5)is"<<Max(9.3,0.5)<<endl;cout<<"Max(9,5,23)is"<<Max(9,5,23)<<endl;#include<iostream>
例10-3
重载函数模板示例重载函数模板华南理工大学计算机学院
周霭如2025{Tt;t=Max(a,b);return
Max(t,c);}int
Max(const
int
a,const
char
b){return
a>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<Max(3,'a')<<endl;cout<<"Max(9.3,0.5)is"<<Max(9.3,0.5)<<endl;cout<<"Max(9,5,23)is"<<Max(9,5,23)<<endl;#include<iostream>using
namespace
std;template<typename
T>TMax(const
Ta,const
Tb)
{returntemplate<typenameT>T
Max(constT
a,const
Tb,const
Tc)重载函数模板示例用普通函数重载函数模板例10-3a>b?a:b;}华南理工大学计算机学院周霭如2025例10-3
重载函数模板示例using
namespace
std;template<typename
T>T
Max(const
T
a,const
Tb){return
a>b?a:b;}template
<typename
T>TMax(const
T
a,const
Tb,const
T
c){Tt;t=Max(a,b);return
Max(t,c);}int
Max(const
int
a,constchar
b){return
a>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<
Max(3,'a')<<endl;cout<<"Max(9.3,0.5)is"<<Max(9.3,0.5)<<endl;cout<<"Max(9,5,23)is"<<Max(9,5,23)<<endl;#include<iostream>华南理工大学计算机学院周霭如2025例10-3
重载函数模板示例using
namespacestd;template
<typename
T>T
Max(const
T
a,const
Tb){return
a>b?a:b;}template
<typenameT>TMax(const
T
a,const
Tb,const
T
c){Tt;t=Max(a,b);return
Max(t,c);}int
Max(const
int
a,const
char
b){return
a>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<Max(3,'a')<<endl;cout<<"Max(9.3,0.5)is"<<
Max(9.3,0.5)
<<endl;cout<<"Max(9,5,23)is"<<Max(9,5,23)<<endl;#include<iostream>华南理工大学计算机学院周霭如2025例10-3
重载函数模板示例using
namespace
std;template<typename
T>T
Max(const
T
a,const
Tb){return
a>b?a:b;}template
<typename
T>T
Max(const
Ta,const
Tb,const
Tc){Tt;
t=Max(a,b);
return
Max(t,c);}int
Max(const
inta,constchar
b){returna>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<Max(3,'a')<<endl;cout<<"Max(9.3,0.5)is"<<Max(9.3,0.5)<<endl;cout<<"Max(9,5,23)is"<<Max(9,5,23)<<endl;#include<iostream>华南理工大学计算机学院周霭如2025例10-3
重载函数模板示例using
namespace
std;template
<typename
T>T
Max(const
T
a,const
Tb){return
a>b?a:b;}template
<typename
T>TMax(const
Ta,const
Tb,const
T
c){Tt;t=Max(a,b);returnMax(t,c);}intMax(const
int
a,const
charb){returna>b?a:b;}int
main(){cout<<"Max(3,'a')is"<<Max(3,'a')<<cout<<"Max(9.3,0.5)is"<<Max(9.3,0.5)cout
<<"Max(9,5,23)is"<<Max(9,5,23N
C:\WINDOWs\system32\cmd.exeMax(3,'a')is
97
Max(9.3,0.5)is
9.3Max(9,5,23)is
·
23)请按任意键继续.#include<iostream>华南理工大学计算机学院周霭如202510.2.3
重载函数模板匹配约定>
寻找和使用最符合函数名和参数类型的函数,若找到则调用它;否则,寻找一个函数模板,将其实例化产生一个匹配的模板函数,若找到则调用它;否则,寻找可以通过类型转换进行参数匹配的重载函数,若找到则调用它
如果按以上步骤均未能找到匹配函数,则调用错误。如果调用有多于一个的匹配选择,则调用匹配出现二义性。华南理工大学计算机学院周霭如2025华南理工大学计算机学院周霭如202510.3
类模板类模板用于实现类所需数据的类型参数化类模板在表示如数组、表、图等数据结构显得特别重要,这些数据结构的表示和算法不受所包含的元素类型的影响华南理工大学计算机学院周霭如202510.3.1
类模板与模板类类模板由模板说明和类说明构成template<
类型形式参数表>类声明类属参数必须至少例如
template<typename
Type>
在类说明中出现一次class
TClass{//TClass
的成员函数privat
e
:TypeDateMember;/..};华南理工大学计算机学院
周霭如2025template<typename
T>class
Array
例10-4
一个数组类模板{public:Array(ints);virtual~Array();virtual
const
T&Entry(int
index)const;virtual
void
Enter(int
index,const
T&value);protected:int
size;T*element;};template<typename
T>Array<T>::Array(int
s){if(s>1)size
=s;elsesize=1;element
=new
T[size];}template<typename
T>Array<T>::~Array(){delete
[]element;}template<typename
T>const
T&Array<T>::Entry(int
index)const{returnelement
[index];}template<typename
T>void
Array<T>::Enter(int
index,const
T&value){element
[index]=value;}华南理工大学计算机学院周霭如2025template<typename
T>class
Array
例10-4
一个数组类模板{public:Array(int
s);virtual~Array();virtual
const
T&Entry(int
index)const;virtualvoidEnter(intindex,constT&value);protected:int
size;T*element;};template<typename
T>Array<T>::Array(int
s){if(s>1)size
=s;elsesize=1;element
=new
T[size];}template<typename
T>Array<T>::~Array(){delete
[]element;}template<typename
T>const
T&Array<T>::Entry(int
index)const{returnelement
[index];}template<typename
T>void
Array<T>::Enter(int
index,const
T&value){element
[index]=value;}华南理工大学计算机学院周霭如2025virtual~Array();virtual
const
T&Eníry(int
index)const;virtualvoidEnter(intindex,constT&value);protected:int
size;T*element;};template<typename
T>Array<T>::Array(int
s){if(s>1)size
=s;elsesize=1;element
=new
T[size];template<typename
T>Array<T>::~Array(){delete
[]element;}template<typename
T>const
T&Array<T>::Entry(int
index)const
{returnelement
[index];}template<typename
T>void
Array<T>::Enter(int
index,const
T&value)
{element
[index]=value;}template<
typename
T>
class
Array{public:Array(int
s);数据成员是T
类型指针0-4
一个数组类模板华南理工大学计算机学院周霭如2025template<typename
T>class
Array{public:Array(ints);virtual~Array();virtual
const
T&Entry(int
index)const;virtual
void
Enter(int
index,const
T&value);protected:int
size;T*element;};template<typename
T>Array<T>::Array(int
s){if(s>1)size
=s;
elsesize=1;element
=new
T[size];template<typename
T>Array<
T>::~Array(){delete
[]element;}template<typename
T>const
T&Array<T>::
Entry(int
index)const{return
element
[index];}template<typenameT>voidArray<T>::Enter(intindex,constT&value){element
[index]=value;}例10-4
一个数组类模板类模板的成员函数是函数模板华南理工大学计算机学院周霭如2025{public:Array(int
s);virtual~Array();virtual
const
T&Fntry(int
index)const;virtual
void
Enter(int
index,const
T&value);protected:int
size;T*element;};template<typenameT>Array<T>::Array(ints){if(s>1)size=s;
else
size=1;element
=new
T[size];template<typenameT>Array<T>:~Array(){delete
[]element;}template<typenameT>const
T&
Array<T>::Entry(intindex)const{return
element
[index];丁template<typename
T>
void
Array<T>::Enter(int
index,const
T&value)
{element
[index]=value;}template<typename
T>class
Array
例10-4
一个数组类模板函数返回常引用函数调用不能做左值修改华南理工大学计算机学院周霭如2025#include<iostream>using
namespace
std;#include"Array.h"int
main(){Array
<int>IntAry(5);int
i;for(i=0;i<5;i++)IntAry.Enter(i,i);cout<<"Integer
Array:\n";for(i=0;i<5;i++)cout<<IntAry.Entry(i)<<'\t';cout<<endl;Array
<double>DouAry(5);for(i=0;i<5;i++)DouAry.Enter(i,(i+1)*0.35);cout<<"Double
Array:\n";for(i=0;i<5;i++)cout<<DouAry.Entry(i)<<'t';cout<<endl;{public:Array(int
s);virtual~Array();virtual
const
T&Entry(int
invirtual
void
Enter(int
index,
protected:int
size;T*element;};template<typename
T>Array<]{if(s>1)size
=s;elsesielement=new
T[size];template<typename
T>Array{delete
[]element;}template<typenameT>const' {return
element[index];}template<typename
T>void
Atemplate<typenameT>class
Array
例10-4
一
个数组类模板{element
[index]=value;}}华南理工大学计算机学院周霭如2025#include<iostream>using
namespace
std;#include"Array.h"int
main(){
Array<int>IntAry(5);int
i;for(i=0;i<5;i++)IntAry.Enter(i,i);cout<<"Integer
Array:\n";for(i=0;i<5;i++)cout<<IntAry.Entry(i)<<'\t';cout<<endl;Array
<double>DouAry(5);for(i=0;i<5;i++)DouAry.Enter(i,(i+1)*0.35);cout<<"Double
Array:\n";for(i=0;i<5;i++)cout<<DouAry.Entry(i)<<'t';cout<<endl;{public:Array(int
s);virtual~Array();virtual
const
T&Entry(int
invirtual
void
Enter(int
index,
protected:int
size;T*element;};template<typename
T>Array<]{if(s>1)size
=s;else
sielement=new
T[size];template<typename
T>Array{delete
[]element;}template<typenameT>const' {return
element[index];}template<typename
T>void
Atemplate<typenameT>class
Array
例10-4
一
个数组类模板{element[index]=value;}}华南理工大学计算机学院周霭如2025template<typename
T>classArray{publie:Array(ints);virtual~ArrayromsEmrtawidEnleprotected:int
sie
;T*element;;template<typename
T>Array<]{if(s>1)size
=s;else
sielement=new
T[size];template<typename
T>Array
{delete
[]element;}template<typename
T>const'
{return
element[index];}template<typename
T>void
A例10-4
一
个数组类模板#include<iostream>using
namespace
std;#include"Array.h"int
main(){
Array<int>IntAry(5);class
Array{public:virtual
const
int&Entry(int
index)const;virtual
void
Enter(int
index,const
int
&value);
protected:int
size;
int*element;for(i=};cout<<"Double
Array:\n";for(i=0;i<5;i++)cout<<DouAry.Entry(i)<<'t';cout<<endl;int
;i;for(i=cout
<<for(i=0cout<<erArray
<d{element
[index]=value;}}华南理工大学计算机学院周霭如2025{publie:Array(ints);virtual~ArrayromsEmrtawoidEtindleprotected:int
sie
;T*element;;template<typename
T>Array<]{if(s>1)size
=s;else
sielement=new
T[size];template<typename
T>Array
{delete
[]element;}template<typename
T>const'
{return
element[index];}template<typename
T>void
Aclass
Array{public:virtual
const
int&Entry(int
index)const;virtual
void
Enter(int
index,const
int
&value);
protected:int
size;
int*element;for(i=};cout<<"Double
Array:\n";for(i=0;i<5;i++)cout<<DouAry.Entry(i)<<'t';cout<<endl;template<typename
T>class
Array
例10-4
一
个数组类模板#include<iostream>using
namespace
std;#include"Array.h"int
main(){
Array<int>IntAry(5);int
;i;for(i=cout
<<for(i=0cout<<erArray
<d{element
[index]=value;}}华南理工大学计算机学院周霭如2025例10-4
一
个数组类模板#include<iostream>using
namespace
std;#include"Array.h"int
main(){Array
<int>IntAry(5);int
i;for(i=0;i<5;i++)IntAry.Enter(i,i);cout<<"Integer
Array:\n";for(i=0;i<5;i++)cout<<IntAry.Entry(i)<<'\t';cout<<endl;Array
<double>DouAry(5);for(i=0;i<5;i++)DouAry.Enter(i,(i+1)*0.35);cout<<"Double
Array:\n";for(i=0;i<5;i++)cout<<DouAry.Entry(i)<<'t';cout<<endl;template<typenameT>class
Array{public:Array(int
s);virtual~Array();virtual
const
T&Entry(int
invirtual
void
Enter(int
index,
protected:int
size;T*element;};template<typename
T>Array<]{if(s>1)size
=s;elsesielement=new
T[size];template<typename
T>Array{delete
[]element;}template<typenameT>const' {return
element[index];}template<typename
T>void
A{element
[index]=value;}}华南理工大学计算机学院周霭如2025{publie:Array(ints);virtual~ArrayraonsEntawidEnleprotected:int
sie;T*element;;template<typename
T>Array<{if(s>1)size
=s;else
sielement
=ne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026融合媒体营销策略与互联网广告投放效果分析报告
- 2026全球电子商务市场发展趋势及未来规划与深度分析发展策略报告
- 2026中国通信行业市场供需现状发展趋势及投资评估规划分析研究报告
- 2026中国新能源汽车行业市场规模竞争格局前景分析评估报告
- 2026年初中化学模拟测试冲刺押题
- 2026中国医疗器械行业市场供需结构及投资布局策略分析研究报告
- 2026中国智能门锁指纹行业市场现状发展分析投资布局研究报告
- 2026中国智能座舱车载显示面板市场增长驱动因素研究报告
- 2026中国涡流泵产业园区发展与区域经济带动作用报告
- 2026汽车制造行业市场深度剖析及未来态势与竞争方案研究报告
- GB/T 44948-2024钢质模锻件金属流线取样要求及评定
- 备考2025高考物理“二级结论”精析与培优争分练讲义-01 共点力平衡(教师版)
- 光伏能源管理合同三方协议书模板(2篇)
- 广联达GTJ建模进阶技能培训
- 2024年镇江卫生系统考试真题
- JTGT B07-01-2006 公路工程混凝土结构防腐蚀技术规范
- 涉密人员违规处罚
- 新版大量不保留灌肠
- GB/T 21144-2023混凝土实心砖
- 地铁降水施工方案
- 老年综合评估和老年综合征课件
评论
0/150
提交评论