欢迎来到天天文库
浏览记录
ID:59199706
大小:104.00 KB
页数:43页
时间:2020-09-26
《第13章43 泛型机制-模板ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类类模板的定义类模板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数或返回值能取任意数据类型。定义格式:templateclassArray{intlow;inthigh;T*storage;public:Array(intlh=0,intrh=0):l
2、ow(lh),high(rh){storage=newT[high-low+1];}Array(constArray&arr);Array&operator=(constArray&a);T&operator[](intindex);~Array(){delete[]storage;}};类模板的成员函数的定义类模板的成员函数都是函数模板,模板参数与类模板相同形式:Template<模板形参>返回类型类模板名<形式参数>::成员函数名(函数的形参表){函数体}Array类的成员函数的格式template3、>返回类型Array::函数名(形式参数表){函数体}Array的成员函数的实现templateArray&Array::operator=(constArray&a){if(this==&a)return*this;//防止自己复制自己delete[]storage;//归还空间low=a.low;high=a.high;storage=newT[high-low+1];for(inti=0;i<=high-low;++i)storage[i]=a.storage[i];re4、turn*this;}templateArray::Array(constArray&arr){low=arr.low;high=arr.high;storage=newT[high-low+1];for(inti=0;iT&Array::operator[](intindex){if(index5、6、index>high){cout<<"下标越界";exit(7、-1);}returnstorage[index-low];}第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类类模板的实例化编译器从模板生成一个特定的类或函数的过程称为模板的实例化。类模板实例化后形成一个模板类。类模板的实例化格式如下:类模板名<模板的实际参数>对象名;如:Arrayarray1(20,30);Arrayarray2(10,20);模板类的对象的使用我们可以用下列语句输入array2的值:for(i=10;i<=208、;++i)array2[i]=0.1*i;也可以用下列语句输出array1的值:for(i=20;i<=30;++i)cout<9、板的实际参数的数目是否正确。第三阶段是实例化。编译器彻底编译模板。所以,调试包含类模板的程序时,必须在定义了类模板的对象并且对对象调用了所有的成员函数后,才能说明类模板的语法是正确的。第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类非类型形参模板的形式参数不一定都是类型,也可以是非类型的参数。在模板实例化时,类型参数用一个系统内置类型的名字或一个用户已定义类的名字作为实际参数,而非类型参数将用一个值作为实际参数。非类型的模板实参的值必须是编译时的常量。非类型10、形参实例定义了一个安全的、可指定下标范围的、且下标范围必须是编译时的常量的类模板Array。(相当于C++中的普通数组)设计考虑在定义类模板时,数组的大小是不知道的,但在编译时必须给出。这可以通过非类型参数实现:该类模板有三个模板参数:数组元素的类型、数组下标的上下界。前者为类型参数,后者为非类型参数。类定义template
3、>返回类型Array::函数名(形式参数表){函数体}Array的成员函数的实现templateArray&Array::operator=(constArray&a){if(this==&a)return*this;//防止自己复制自己delete[]storage;//归还空间low=a.low;high=a.high;storage=newT[high-low+1];for(inti=0;i<=high-low;++i)storage[i]=a.storage[i];re
4、turn*this;}templateArray::Array(constArray&arr){low=arr.low;high=arr.high;storage=newT[high-low+1];for(inti=0;iT&Array::operator[](intindex){if(index5、6、index>high){cout<<"下标越界";exit(7、-1);}returnstorage[index-low];}第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类类模板的实例化编译器从模板生成一个特定的类或函数的过程称为模板的实例化。类模板实例化后形成一个模板类。类模板的实例化格式如下:类模板名<模板的实际参数>对象名;如:Arrayarray1(20,30);Arrayarray2(10,20);模板类的对象的使用我们可以用下列语句输入array2的值:for(i=10;i<=208、;++i)array2[i]=0.1*i;也可以用下列语句输出array1的值:for(i=20;i<=30;++i)cout<9、板的实际参数的数目是否正确。第三阶段是实例化。编译器彻底编译模板。所以,调试包含类模板的程序时,必须在定义了类模板的对象并且对对象调用了所有的成员函数后,才能说明类模板的语法是正确的。第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类非类型形参模板的形式参数不一定都是类型,也可以是非类型的参数。在模板实例化时,类型参数用一个系统内置类型的名字或一个用户已定义类的名字作为实际参数,而非类型参数将用一个值作为实际参数。非类型的模板实参的值必须是编译时的常量。非类型10、形参实例定义了一个安全的、可指定下标范围的、且下标范围必须是编译时的常量的类模板Array。(相当于C++中的普通数组)设计考虑在定义类模板时,数组的大小是不知道的,但在编译时必须给出。这可以通过非类型参数实现:该类模板有三个模板参数:数组元素的类型、数组下标的上下界。前者为类型参数,后者为非类型参数。类定义template
5、
6、index>high){cout<<"下标越界";exit(
7、-1);}returnstorage[index-low];}第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类类模板的实例化编译器从模板生成一个特定的类或函数的过程称为模板的实例化。类模板实例化后形成一个模板类。类模板的实例化格式如下:类模板名<模板的实际参数>对象名;如:Arrayarray1(20,30);Arrayarray2(10,20);模板类的对象的使用我们可以用下列语句输入array2的值:for(i=10;i<=20
8、;++i)array2[i]=0.1*i;也可以用下列语句输出array1的值:for(i=20;i<=30;++i)cout<9、板的实际参数的数目是否正确。第三阶段是实例化。编译器彻底编译模板。所以,调试包含类模板的程序时,必须在定义了类模板的对象并且对对象调用了所有的成员函数后,才能说明类模板的语法是正确的。第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类非类型形参模板的形式参数不一定都是类型,也可以是非类型的参数。在模板实例化时,类型参数用一个系统内置类型的名字或一个用户已定义类的名字作为实际参数,而非类型参数将用一个值作为实际参数。非类型的模板实参的值必须是编译时的常量。非类型10、形参实例定义了一个安全的、可指定下标范围的、且下标范围必须是编译时的常量的类模板Array。(相当于C++中的普通数组)设计考虑在定义类模板时,数组的大小是不知道的,但在编译时必须给出。这可以通过非类型参数实现:该类模板有三个模板参数:数组元素的类型、数组下标的上下界。前者为类型参数,后者为非类型参数。类定义template
9、板的实际参数的数目是否正确。第三阶段是实例化。编译器彻底编译模板。所以,调试包含类模板的程序时,必须在定义了类模板的对象并且对对象调用了所有的成员函数后,才能说明类模板的语法是正确的。第13章泛型机制—模板类模板的定义类模板的实例化模板的编译非类型形参和参数的默认值类模板的友元类模板作为基类非类型形参模板的形式参数不一定都是类型,也可以是非类型的参数。在模板实例化时,类型参数用一个系统内置类型的名字或一个用户已定义类的名字作为实际参数,而非类型参数将用一个值作为实际参数。非类型的模板实参的值必须是编译时的常量。非类型
10、形参实例定义了一个安全的、可指定下标范围的、且下标范围必须是编译时的常量的类模板Array。(相当于C++中的普通数组)设计考虑在定义类模板时,数组的大小是不知道的,但在编译时必须给出。这可以通过非类型参数实现:该类模板有三个模板参数:数组元素的类型、数组下标的上下界。前者为类型参数,后者为非类型参数。类定义template
此文档下载收益归作者所有