C++程序设计教程第7版-2641-2860_第1页
C++程序设计教程第7版-2641-2860_第2页
C++程序设计教程第7版-2641-2860_第3页
C++程序设计教程第7版-2641-2860_第4页
C++程序设计教程第7版-2641-2860_第5页
已阅读5页,还剩215页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论