群体类和群体数据的组织.ppt
《群体类和群体数据的组织.ppt》由会员分享,可在线阅读,更多相关《群体类和群体数据的组织.ppt(54页珍藏版)》请在三一文库上搜索。
1、本章主要内容,函数模板 类模板 String类 群体类 群体数据的组织,9.0 函数模板,函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。 声明方法: template 函数声明,函 数 模 板,模板参数表,模板参数表由用逗号分隔的模板参数构成,可以包括以下形式内容: 1)typename/class 标识符 如typename T,指明可以接收一个类型参数。这些类型参数代表的是类型,可以是内部类型或者自定义类型。 2)类型说明符 标志符 如 int val,指明可以接收一个由类型说明符所规定类型的常量作为参数。 3)template class 标
2、志符 如templateclass Container指明可以接收一个类模板作为参数。,求绝对值函数的模板,#include using namespace std; template T abs(T x) return x0?-x:x; void main() int n=-5; double d=-5.5; coutabs(n)endl; coutabs(d)endl; ,运行结果: 5 5.5,求绝对值函数的模板分析,编译器从调用abs()时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式abs(n),由于实参n为int型,所以推导出模板中类型参数T为int。 当类型参数的含义
3、确定后,编译器将以函数模板为样板,生成一个函数: int abs(int x) return x0?-x:x; ,类模板用于设计一个通用类,使这个类的数据成员的类型、成员函数的参数能够按照需要进行改变(即参数化) 声明类模板的一般形式为: template class class_name 其中,Ttype是一个标识符,代表所声明的类模板中参数化的类型名。注意:模板类的成员函数必须是函数模板。 定义了类模板以后,就可以创建这个类的实例: Class_name 对象1,对象n; type用具体的数据类型代入,系统根据代入的数据类型生成所需的类,并创建该类的对象。,9.1 类模板,/EX9_1.c
4、pp : 演示类模板的定义和使用 #include #include struct student /声明一个结构体类型 int id ; int score ; ; template /声明一个类模板 class buffer /实现对任意类型数据的存取 private: T a ; int empty ; public: buffer( void ) ; /声明buffer类的构造函数 T get( void ) ; void put( T x) ; ;,template /定义buffer类的构造函数模板 buffer:buffer( void ):empty(0) template /
5、定义成员函数get模板 T buffer:get(void) if (empty=0) cout /定义成员函数put模板 void buffer:put(T x) empty+; a = x; ,void main(void) student s = 1022, 78 ; buffer i1, i2 ; /声明整型对象i1, i2 buffer stu1 ; /声明结构体对象stu1 buffer d ; /声明双精度对象d i1.put(13) ; /对象i1调用put执行了empty+ i2.put(-101) ; /对象i2调用put执行了empty+ couti1.get( )“ “
6、i2.get( ) endl ; stu1.put( s ) ; /对象stu1调用put执行了empty+ cout“the students id is “stu1.get( ).idendl ; cout“the students score is “stu1.get( ).scoreendl ; coutd.get( )endl ; /对象d没有调用put去执行empty+ /,可能直接exit而不执行return a,程序运行结果为: 13 -101 the students id is 1022 the students score is 78 the buffer is empt
7、y!,1. string类对象的定义与初始化 形式:string 对象名(“字符串“) / 表示可选项 或 string 对象名=“字符串” / 表示可选项 2. string类对象的操作 通过string类对象的成员函数与重载运算符(、 . ,string类,/EX9_2.cpp : 演示string类的应用 #include #include using namespace std ; void main( ) string s1(“Hello“), s2, s3, s4 ; /定义string对象 s2 = s1 ; /用“=“号进行赋值(重载运算符=) s3.assign(s1); /
8、调用成员函数assign( )进行赋值 cout“s1=“s1.data( )“, s2=“s2.data( ) “, s3=“s3.data( )endl ; cout“s1的长度=“s1.length( )endl; /输出字符串长度 char a =“China!“, b6 ; s1 = a ; /string对象s1接收字符数组a的赋值 cout“s1=“s1.data( )endl ; for( int i=0; i5; i+ ) bi = s2i ; / b5= 0; cout“字符数组b= “bendl ; /字符串的连接 s4=s2+“ “+s1; /用“+“进行字符串的连接(
9、重载运算符+) s3=s2.append( s1 ) ; /s2与s1连接并赋给s3,注意连接后的s2结果,cout“s2=“s2.data( )“, s3=“s3.data( )“, s4=“ s4.data( )endl ; int f=pare( 6, 5, s4, 7, 5 ) ;/将s3的第6个开始的5个字符与 /s4的第7个开始的5个字符进行比较 if ( f=0 ) cout“s3与s4比较的部分相等“n“; else cout“s3与s4比较的部分不相等“n“; /取子字符串操作 string sz=s2.substr( 5, 5 ) ; /取s2的第5个开始的5个字符 cou
10、t“子字符串sz=“sz.data( )endl ; s1.swap(s4) ; /交换s1与s4 cout“s1=“s1.data()“, s4=“s4.data()endl ; cout“字符串China在s1中的位置为:“ s1.find(“China“)endl; int len=s1.length( ) ; char *pt=new charlen+1 ; /定义字符型指针并动态分配空间 s1.copy(pt,len,0) ; /将s1复制到pt所指的数组,从s10处开始复制len个字符 ptlen= 0 ; coutptendl ; s2 = pt ; /string类对象s2接收
11、字符型指针的赋值 couts2.data( )endl ; ,程序运行结果为: s1=Hello, s2=Hello, s3=Hello s1的长度=5 s1=China! 字符数组b= Hello s2=HelloChina!, s3=HelloChina!, s4=Hello China! s3与s4比较的部分相等 子字符串sz=China s1=Hello China!, s4=China! 字符串China在s1中的位置为: 6 Hello China! Hello China!,9.2 群体数据,群体的概念,群体是指由多个数据元素组成的集合体。群体可以分为两个大类:线性群体和非线性群
12、体。 线性群体中的元素按位置排列有序,可以区分为第一个元素、第二个元素等。,非线性群体不用位置顺序来标识元素。,9.2.1 线性群体的概念,线性群体中的元素次序与其位置关系是对应的。在线性群体中,又可按照访问元素的不同方法分为直接访问、顺序访问和索引访问。 9.2.2 直接访问群体数组 静态数组是具有固定元素个数的群体,其中的元素可以通过下标直接访问。缺点:大小在编译时就已经确定,在运行时无法修改。 动态数组由一系列位置连续的,任意数量相同类型的元素组成。优点:其元素个数可在程序运行时改变。动态数组类模板举例参见P293301,#ifndef ARRAY_CLASS #define ARRAY
13、_CLASS using namespace std; #include #include #ifndef NULL const int NULL = 0; #endif / NULL enum ErrorType invalidArraySize, memoryAllocationError, indexOutOfRange ; char *errorMsg = “Invalid array size“, “Memory allocation error“, “Invalid index: “ ;,动态数组类模板程序,17,template class Array private: T* a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 群体 数据 组织
链接地址:https://www.31doc.com/p-2159540.html