最新第9章 群体类和群体数据的组织教程文件

合集下载

第九章-群体管理精选全文

第九章-群体管理精选全文
实现某一特定目标而组成的集合体。 (1)有明确的成员;(2)群体意识;(3)共
同的目标;(4)相互依赖;(5)相互作用; (6)统一行动。 人们加入群体的原因 安全、地位、自尊、归属、权力和实现目标
2.群体类型
类型:正式群体和非正式群体 (1)正式群体:通常是组织为了完成特定任务
而成立的,是组织的正式结构的一部分。(有 明确的工作任务和分工) (2)非正式群体:自愿形成,更多地以个人关 系、朋友或共同的兴趣为基础。为了满足人的 社会需求(如交往),而非任务。 如,个人职业发展所需,维护朋友关系,满足协 作的需要等。
8.团队建设(Group)
中心论题:有效实现组织目标与满足个体发展 需求的统一
高绩效群体所需的重要角色,马格里森等的研 究结论:
(1)汇报者-顾问;(2)创造者-革新者; (3)探索者-促进者;(4)评估者-开发者; (5)推进者-组织者;(6)完成者-生产者;
(7)监督者-审查者;(8)支撑者-审查者; (9)联络者
现代商业银行对人才的需求
改革创新的决策型人才 经营管理人才:银行家 科技型人才 实务型人才 复合型人才
1.人力资源系统
主要活动:招聘和选拔;培训和发展; 绩效管理;评价;奖酬。 传统的人事管理:主要负责组织与个人 的联络和协调
人员选择,报酬,用工原则,纪律, 解雇等。
建设银行的人事与激励约束机制改革
第九章 群体管理
群体的定义 群体产生的原因 影响群体绩效的因素 群体管理
管理者面临的问题
如何完成公司的目标? 如何使得组织成员愉快地为完成工作任 务? 如何能够使得组织成员各尽其能而又团 结合作,从而有效提高组织的绩效?
1.群体的含义
群体(Team): --共同协作的人员的集合。 --两个或以上相互作用、相互依赖的个体,为

群体类和群体数据的组织

群体类和群体数据的组织

//-------------------------------------------------------//求绝对值的函数模板,本例的绝对值函数可自动基于实参类型调整形参类型和返回值类型//-------------------------------------------------------#include<iostream>using namespace std;//-------------------------------------------------------template<typename T>T abs(T x){ return x<0?-x:x; }//-------------------------------------------------------void main(){int n=-5;double d=-5.5;cout<<abs(n)<<endl;cout<<abs(d)<<endl;}//-------------------------------------------------------//交换两个数的函数模板,本例Swap函数其形参可为任意相容类型//-------------------------------------------------------#include<iostream>using namespace std;//-------------------------------------------------------template<typename T1,typename T2>void Swap(T1 &x, T2 &y){T1 x1 = x;T2 y1 = y;x = y1;y = x1;}//-------------------------------------------------------void main(){int x = 8;double y = 3.14;cout<<"交换前:x="<<x<<";y="<<y<<endl;Swap(x,y);cout<<"Swap后:x="<<x<<";y="<<y<<endl;}//--------------------------------------------------------------------------/*类模板应用举例,本例示范了一个类模板Store,它可以对任意类型数据进行存取体会本例,考虑实现一个通用的单项链表构造、遍历、添加节点、删除节点等算法*///--------------------------------------------------------------------------#include <iostream>using namespace std;//--------------------------------------------------------------------------// 结构体Studentstruct Student{int id; //学号float gpa; //平均分};//--------------------------------------------------------------------------template <class T> //类模板:实现对任意类型数据进行存取class Store{private:T item; // 用于存放任意类型的数据int haveValue; // 用于标记item是否已被存入内容public:Store(void); // 默认形式(无形参)的构造函数T GetElem(void); //提取数据函数void PutElem(T x); //存入数据函数};//--------------------------------------------------------------------------// 默认形式构造函数的实现,将haveValue设置为0template <class T>Store<T>::Store(void): haveValue(0) //直接将成员变量haseValue初始化为0{}//Store<T>::Store(void)//{// haveValue = 0;//}//--------------------------------------------------------------------------template <class T> // 提取数据函数的实现T Store<T>::GetElem(void){ // 如果试图提取未初始化的数据,则终止程序if (haveValue == 0){ cout << "item 不存在!程序终止" << endl;exit(1);}return item; // 返回item中存放的数据}//--------------------------------------------------------------------------template <class T> // 存入数据函数的实现void Store<T>::PutElem(T x){ haveValue++; // 将haveValue 置为TRUE,表示item中已存入数值item = x; // 将x值存入item}//--------------------------------------------------------------------------void main(void){Student g= {1000, 23}; //此处使用的结构体初始化,相当于:g.id=1000; g.gpa=23;Store<int> S1, S2; //实例化类模板S1,S2它们均为int 类型Store<Student> S3;//实例化类模板S3,它是自定义的结构体Student类型Store<double> D; //实例化类模板D 它们均为double 类型S1.PutElem(3);S2.PutElem(-7);cout << S1.GetElem() << " " << S2.GetElem() << endl;S3.PutElem(g);//以下语句均是错误的,因为S3初始化时指明的模板是Student,故PutElem接收的参数也必须是Student//S3.PutElem(3)//S3.PutElem(s1)cout << "The student id is " << S3.GetElem().id << endl;cout << "尝试获取D 中的元素:" ;cout << D.GetElem() << endl; //输出对象D的数据成员// 由于D未经初始化,在执行函数D.GetElement()时出错}//--------------------------------------------------------------------------//动态数组类模板程序,本例可实现任意数值类型的数组,其长度动态改变,值得收藏//--------------------------------------------------------------------------#include <iostream>#include <cstdlib>#include <iomanip>using namespace std;//--------------------------------------------------------------------------#ifndef NULLconst int NULL = 0;#endif // NULL//--------------------------------------------------------------------------enum ErrorType{ invalidArraySize, memoryAllocationError, indexOutOfRange };char *errorMsg[] ={"数组大小无效", "申请内存失败","无效索引: "};//--------------------------------------------------------------------------template <class T>class Array{ private:T* alist;int size;void Error(ErrorType error,int badIndex=0) const; //显示错误信息public:Array(int sz = 50); // 构造函数Array(const Array<T>& A); //拷贝构造函数~Array(void){delete[] alist;}Array<T>& operator= (const Array<T>& rhs); //重载"="运算符T& operator[](int i); //重载下标操作符operator T* (void) const;//重载指针转换操作符int ListSize(void) const{return size;} //返回数字大小void Resize(int sz); //重置数组大小};//--------------------------------------------------------------------------// 构造函数template <class T>Array<T>::Array(int sz){size = sz; // 将元素个数赋值给变量sizeif (sz <= 0) //sz为数组大小(元素个数),若小于0,则输出错误信息{Error(invalidArraySize);return;}alist = new T[size]; //动态分配size个T类型的元素空间if (alist == NULL) //如果分配内存不成功,输出错误信息Error(memoryAllocationError);}//-------------------------------------------------------------------------- template <class T> //拷贝构造函数Array<T>::Array(const Array<T> &X){int n = X.size;size = n;alist = new T[n];if (alist == NULL) Error(memoryAllocationError);T* srcptr = X.alist; // X.alist是对象X的数组首地址T* destptr = alist; // alist是本对象中的数组首地址while (n--) // 逐个复制数组元素*destptr++ = *srcptr++;}//-------------------------------------------------------------------------- template <class T>//重载"="运算符函数Array<T>& Array<T>::operator= (const Array<T>& rhs){ int n = rhs.size;if (size != n){ delete [] alist;alist = new T[n];if (alist == NULL) Error(memoryAllocationError);size = n;}T* destptr = alist;T* srcptr = rhs.alist;while (n--)*destptr++ = *srcptr++;return *this;}//-------------------------------------------------------------------------- template <class T>//重载下标操作符函数T& Array<T>::operator[] (int n){// 检查下标是否越界if (n < 0 || n > size-1)Error(indexOutOfRange,n);// 返回下标为n的数组元素return alist[n];}//-------------------------------------------------------------------------- template <class T> //重载指针转换操作符Array<T>::operator T* (void) const{// 返回当前对象中私有数组的首地址return alist;}//--------------------------------------------------------------------------template <class T> //重置数组大小void Array<T>::Resize(int sz){if (sz <= 0) //sz, 若小于0,则输出错误信息{Error(invalidArraySize);return;}T* alist2 = new T[sz];if (alist2 == NULL) //如果分配内存不成功,输出错误信息{Error(memoryAllocationError);return;}memcpy(alist2, alist,sizeof(T) * size);delete[] alist;alist = alist2;size = sz; // 将元素个数赋值给变量size}//--------------------------------------------------------------------------template <class T> //重置数组大小void Array<T>::Error(ErrorType error,int badIndex) const //显示错误信息{cout<<errorMsg[error]<<endl;}//--------------------------------------------------------------------------void main(void){Array<int> A(10);//Array<double> A(100); 根据实际情况设置初始化长度和Resize中的扩展步长int n;int primecount = 0, i, j;cout <<"输入大于等于2 的整数,用于求该整数以内的所有质数: ";cin >> n;A[primecount++] = 2; // 2是一个质数for(i = 3; i < n; i++){if (primecount == A.ListSize()) //若得到的质数个数大于数组长度,则重置数组大小(增加10)A.Resize(primecount + 10);if (i % 2 == 0) continue;j = 3;while (j <= i/2 && i % j != 0) j += 2;if (j > i/2) A[primecount++] = i;}for (i = 0; i < primecount; i++) //输出质数{ cout << setw(5) << A[i]; //设置输出格式,宽度为5,此处应根据n 的大小只能调整宽度if ((i+1) % 10 == 0) cout << endl;}cout << endl;}。

第9章 群体类和群体数据的组织

第9章 群体类和群体数据的组织
4
C++语言程序设计
模板的概念
1、模板概念 – 模板是对具有相同特性的函数或类的再抽象, 模板是一种参数多态性的工具,可以为逻辑 功能相同而类型不同的程序提供一种代码共 享的机制。 – 一个模板并非一个实实在在的函数或类,仅 仅是一个函数或类的描述,是参数化的函数 和类。 2、模板分类
– 函数模板 – 类模板
21
C++语言程序设计
模板参数
1、模板参数的转换问题 C++在实例化函数模板的过程中,只是 简单地将模板参数替换成调用实参的类 型,并以此生成模板函数,不会进行参 数类型的任何转换。
22
C++语言程序设计
函数模板的实例化
【例2】 求两个数最大值的普通函数。 #include <iostream> using namespace std; double max(double a,double b){return (a>b)?a:b;} void main(){ double a=2,b=3.4; float c=5.1,d=3.2; cout<<"2, 3.2 的最大值是: "<<max(2,3.2)<<endl; cout<<"a, c 的最大值是:"<<max(a,c)<<endl; cout<<"'a', 3 的最大值是: "<<max('a',3)<<endl; }
12
C++语言程序设计
函数模板的定义
1、函数模板的定义 template <class T1, class T2,…>返回类型 函数名(参数 表){ …… //函数模板定义体 }

实验十 群体数据的组织

实验十  群体数据的组织

实验十群体数据的组织(2学时)一、实验目的1.掌握对数组元素排序的方法。

2.掌握对数组元素查找的方法。

3.应用标准C++库(STL)实现查找与排序。

二、实验任务1.将直接插入排序、直接选择排序、冒泡排序、顺序查找函数封装到教材中第9章的数组类中,作为成员函数。

实现并测试这个类。

2.定义一个整形数组,使用C++标准模板库(STL)中的查找函数find()进行数据的查找。

3.(选做)定义一个对people类对象数组按编号排序的函数,一个按编号查找people 对象的函数。

在测试程序中使用前面实验得到的结果定义教师数组和学生数组,分别对教师数组和学生数组进行排序和查找。

三、实验步骤1.编写程序arrayl.h定义并实现数组类,其中包含成员函数vold InsertionSort()实现直接插入排序;成员函数vold SelectionSort()实现直接选择排序;成员函数void BubbleSort()实现冒泡排序;成员函数int SeqSearch(T Key)实现顺序查找;这些函数操作的数据就是数组类的数据成员alist。

在测试程序labl0_1.cpp中定义数组类的对象,测试这些成员函数。

2.定义一个包含8个元素的整型数组,使用STL中的函数find(InputIterator first,InputIterator last,const T& value)进行数据的查找。

在find函数的参数中,first是数组第一个元素的地址,last是数组最后一个元素的地址,value是待查找的数字。

在程序中把数组的值和查找的结果显示出来。

程序名:1abl0_2.cpp。

第讲 群体、团队

第讲 群体、团队

只信任带头人
稳定
清晰
高产
自发
信任程序 信任成员
带头人关注的焦点
个人的任务 人际互动 任务互动
团队的自我发展
思考:花儿团队成员都扮演了哪些角色?
张翰
华晨宇
李菲儿
张凯丽
郑佩佩
刘涛
许晴
实干者
协调者
推进者
完美者 凝聚者
监督者
创新者 信息者
测试:团队角色问卷
对下列问题的回答,可能在不同程度上描绘了您的 行为。每题有8句话,请将10分分配给这8个句子。 分配原则:最能体现您行为的句子分最高,以此类 推。最极端的情况也可能是10分全部分配给其中的 某一句话,根据您的实际情况把分数填入后门的答 题纸中。
远 D.在提出独到见解方面,我是数一数二的 E.对于与大家共同利益有关的积极建议我总是乐于支持的 F.热衷于寻找最新的思想和新的发展 G.我相信我的判断能力有助于做出正确的决策 H.我能使人放心的是,对那些最基本的工作,我都组织得井井有条
团队角色答题纸



















第讲 群体、团队 .pptx
人群
由一定数量的人组成 (人的集合体)
群体
组织
共同目标 (共同的) 由一定数量的人组成 (人的集合体) 组织有统一的行为规范
共同目标或特定使命 (共同的)
由一定数量的人组成 (人的集合体) 有一定的构架 (有机整体)
组织有统一的行为规范
为了实现某个特定目的,两个以上相互 作用、相互依赖的个体的组合。

群体类和群体数据的组织

群体类和群体数据的组织

1. 类模板的定义
例如,下面定义了一个模板类Student,为了增强类的适用性,将学号设 计成参数化类型,它可以实例化成字符串、整型等;将成绩设计成参数化类型, 它可以实例化成整型、浮点型、字符型(用来表示等级分)等;
template <class TNO, class TScore, int num> // TNO,TScore 为参数化类型 class Student { private: TNO StudentID[num]; //参数化类型数组,存储姓名 TScore score[num]; //参数化类型数组,存储分数
返回类型 函数名 (形参表) 模板参数表 { 函数体; }
意义: 对于功能完全一样,只是参数类型不同函数,能写一段通用代码适用于多种 不同的数据类型,会使代码的可重用性大大提高,从而提高软件的开发效率。
函数模板
注意:
template关键字表示声明的是模板。 < >中是模板的参数表,可以有一项或多项,其中的类型名称为参数化类型,是 一种抽象类型或可变类型。 class是类型关键字,也可以用typename作为关键字。 函数返回值类型可以是普通类型,也可以是模板参数表中指定的类型。 模板参数表中的参数类型可以是普通类型。 例如: //将add函数定义成了一个函数模板: template <class T> T add(T x, T y) { return x+y; }
public: TNO TopStudent() { return StudentID[0]; } int BelowNum(TScore ascore) { return 0; } void sort() { } };
1. 类模板的定义

第9章 认识群体和管理工作团队

第9章 认识群体和管理工作团队

9-39
"团队"成员的基本要求
• 候选人具备项目工作所需要的技能 候选人的需要可以通过参与项目而实现 候选人应具有于原有员工相融的个性 候选人应不反对项目工作的各种约束
9-40
警惕:团队并非总是问题的答案
• 三种测试来考查一个团队是否与它的情境相匹 配: – 该工作是否会比一个人单独干更好? – 群体中工作的人会有共同的目的或一系列共 同的目标吗?
9-16
具有凝聚力的群体更为有效吗?
• 群体 凝聚力
– 成员相互吸引、 参与群体目标的 程度。
9-17
是什么因素导致顺从现象产生?
• 环境因素:如果该群体是一个人的参照群体,群体的意见 一贯比较一致,群体比较团结,那么,这个人就容易在群 体压力之下产生顺从行为。 • 个人因素:如果一个人的智力较差,情绪不稳定,缺少自 信心,则在群体中经常要依赖别人,比较容易产生从众行 为。 • 群体成员的真实感受分析表明,从众现象的表现行为和内 心反应并不一定是一致的。 – “心服口服” – “口服心不服” – “心服口不服” – “心口皆不服”
• 地位
– 个体在一个群体 中的威望等级、 位置或是级别。
9-14
群体规模会影响群体行为吗?
大群体
– 善于获得各种不同的信息
小群体
– 在执行上更快
• 群体懈怠
– 个体在共同工作时比在单独情况下会倾向于做 出更少的努力。
9-15
社会惰化
社会惰化(Social loafing)也称为社会惰化作用,指群 体一起完成一件事情时,个人所付出的努力比单独 完成时偏少的现象。早在数十年前,心理学家达谢 尔(J.F.Dashiell,1930)就发现,随着共同完成一件 事情的人数增加,每个人所作的个人努力程度也会 逐步下降。达谢尔曾经用实验的方法测量拔河比赛 中每个人的用力水平。结果发现,如果一个人独自 参加实验,那么平均拉力可达63公斤;如果是群体 一起参与,则参加人数越多,每个人所贡献的平均 拉力越小。在达谢尔的实验中,两人一起拔河时, 每人平均拉力下降到了59公斤;3人时继续下降为 53.3公斤;8人时人均仅剩31公斤。

c“加”“加”9群体类和群体数据的组织

c“加”“加”9群体类和群体数据的组织
Error(memoryAllocationError); }
PPT文档演模板
c“加”“加”9群体类和群体数据的 组织
数组类的拷贝构造函数

体直 接 访
问 的 线
性 群
template <class T>
Array<T>::Array(const Array<T>& X)
{
int n = X.size;
•12
第二部分—群体数据
线性群体
– 线性群体的概念 – 直接访问群体--数组类 – 顺序访问群体--链表类 – 栈类 – 队列类
PPT文档演模板
c“加”“加”9群体类和群体数据的 组织
群体的概念
群体是指由多个数据元素组成的集 合体。群体可以分为两个大类:线性群 体和非线性群体。
线性群体中的元素按位置排列有序, 可以区分为第一个元素、第二个元素等。
"Invalid index: "
};
•17
template <class T> class Array { private:
T* alist; int size; void Error(ErrorType error,int badIndex=0) const; public: Array(int sz = 50); Array(const Array<T>& A); ~Array(void); Array<T>& operator= (const Array<T>& rhs); T& operator[](int i); operator T* (void) const; int ListSize(void) const; void Resize(int sz); };

群体数据的组织(排序、查找)

群体数据的组织(排序、查找)

群体数据的组织
1、插入排序
给定一些数值,按照某种要求(如升序、降序等)进行排序,寻找插入位置的方法不同可分为不同的插入排序方法。

2、选择排序
当按升序排序时,选择排序的基本思想:每次从序列中选择一个最小的元素,然后和首元素交换,直到不能交换为止(最简单的是直接选择排序)。

3、交换排序
交换类排序的基本思想:两两比较待排序序列中的元素,并交换不满足序列要求的各对元素,直到全部满足顺序要求为止。

(冒泡排序是最基本的交换排序)
对n个元素按升序冒泡排序步骤:
(1)第一个元素与第二个元素比较,然后第二个元素与第三个元素比较,依次进行下去,直到第n-1与第n个元素比较,各次比较若为逆序,则交换数据。

这是第
一趟,最大元素被交换到第n个位置。

(2)对前n-1个元素进行第二次冒泡排序,得到其中的最大元素在第n-1个位置。

(3)继续冒泡排序下去,直到排序未发生交换,则排序完毕。

总共进行n-1趟。

4、顺序查找
顺序查找是最简单的查找方式。

基本思想:从数组的首元素开始,逐个元素与待查找的元素比较,直到查找到相等的元素。

5、折半查找
如果是在一个元素排列有序的数组中查找,可采用折半查找。

折半查找的基本思想:对已排好序的序列,把要查找的元素与序列的中间位置的元素比较大小,判断要查找的元素属于哪一半,然后再按照一半的方式比较,一直比较下去,直到找到需要的元素位置。

群体类和群体数据的组织

群体类和群体数据的组织

拷贝前
b旳数组元素 占用旳内存
拷贝后
21
C++语言程序设计
数组类模板旳重载"="运算符函数
直接访问旳线性群体
//重载“=”运算符
template <class T>
Array<T> &Array<T>::operator = (const Array<T>& rhs) {
if (&rhs != this) {
if (size != rhs.size) {
delete [] list;
//删除数组原有内存
size = rhs.size; //设置本对象旳数组大小
list = new T[size]; //重新分配n个元素旳内存
}
//从对象X复制数组元素到本对象
for (int i = 0; i < size; i++)
定义措施:
template <模板参数表> 函数定义
模板参数表旳内容
– 类型参数:class(或typename) 标识符 – 常量参数:类型阐明符 标识符 – 模板参数:template <参数表> class 标识符
4
函数模板
C++语言程序设计
求绝对值函数旳模板
#include <iostream> using namespace std; template<typename T> T abs(T x) {
12
C++语言程序设计
第二部分:群体数据
线性群体
– 线性群体旳概念 – 直接访问群体--数组类 – 顺序访问群体--链表类 – 栈类 – 队列类
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return x<0?-x:x; }
4
函数模板
函 ▪ 函数模板可以用来创建一个通用功能的函 数 数,以支持多种不同形参,进一步简化重 模 载函数的函数体设计。 板
5
函数模板
▪ 函数模板的定义形式:
函 template<模板形参表> 返回类型 函数名(函数模板形参表)
数{ 函数模板定义体
模} 板 template <typename T>
第9章 群体类和群体数据 的组织
1、函数模板和类模板 2、线性群体 3、群体数据的组织 4、综合实例
第一部分—模板
▪ 函数模板 ▪ 类模板
3
函数模板
理想的函数重载是针对不同的参数做不同的事.

数 int abs(int x)
模 板
{ return x<0?-x:x;
}
double abs(double x) {
14
template <typename T>
// 提取数据函数的实现
T& Store<T>::getElem(){
// 如果试图提取未初始化的数据,则终止程序
if (!haveValue)
{
cout << "No item present!" << endl;
exit(1);
}
return item; // 返回item中存放的数据
板 参数T为int。
▪ 当类型参数的含义确定后,编译器将以
函return x<0?-x:x; }
8
函数模板示例
//9_1.cpp #include<iostream>
函 using namespace std; 数 template<typename T> 模 void outputArray(const T* array,int count) 板{
void putElem(T x); //存入数据函数
private:
T item;
// 用于存放任意类型的数据
bool haveValue; // 用于标记item是否已被存入内 容
}; template <typename T> Store<T>::Store():haveValue(false) { }
} ▪ 如果需要在类模板以外定义其成员函数,则要 采用以下的形式:
template <模板参数表> 返回类型名 类名<模板参数标识符列表>::函数名(参
数表)
12
例9-2 类模板应用举例

//9_2.cpp
#include <iostream>

#include <cstdlib>
using namespace std;
{ int n=-5; double d=-5.5; cout<<abs(n)<<endl; cout<<abs(d)<<endl; return 0;
7
}
求绝对值函数的模板分析

▪ 编译器从调用abs()时实参的类型,推 导出函数模板的类型参数。
数 例如,对于调用表达式abs(n),由于
模 实参n为int型,所以推导出模板中类型
for(int i=0;i<count;i++) cout<<array[i]<<" ";
cout<<endl; }
9
int main() {
const int A_COUNT=8,B_COUNT=8,C_COUNT=20;
函 数
int a[A_COUNT]={1,2,3,4,5,6,7,8}; double b[B_COUNT]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8}; char c[C_COUNT]="Welcome to see you!";
模 cout<<"a array contains:"<<endl; outputArray(a,A_COUNT);
板 cout<<"b array contains:"<<endl; outputArray(b,B_COUNT);
cout<<"c array contains:"<<endl;
outputArray(c,C_COUNT);
return 0; }
10
类模板的作用


使用类模板使用户可以为类声明一 种模式,使得类中的某些数据成员、
板 某些成员函数的参数、某些成员函数
的返回值,能取任意类型。(包括基
本类型的和用户自定义类型)。
11
类模板的声明
类 ▪ 类模板: template <模板参数表>
模 class 类名 {
板 类成员声明

// 结构体Student
struct Student
{
int id; //学号
float gpa; //平均分
};
13
//类模板:实现对任意类型数据进行存取
template <typename T>
class Store
{
public:
Store(); // 默认形式(无形参)的构造函数
T& getElem(); //提取数据函数
}
template <typename T> // 存入数据函数的实现
void Store<T>::putElem(T x){
haveValue=true;
// 将haveValue 置为 TRUE
,表示item中已存入数值
item=x;
// 将x值存入item
}
15
int main() {
Store<int> s1, s2; s1.putElem(3); s2.putElem(-7); cout<<s1.getElem()<<" "<<s2.getElem()<<endl; Student g={1000, 23}; Store<Student> s3; s3.putElem(g); cout << "The student id is " << s3.getElem().id << endl; Store<double> d; cout << "Retrieving object d..." ; cout << d.getElem() << endl; //输出对象D的数据成员 // 由于D未经初始化,在执行函数D.getElement()时出错 return 0; }
T abs(T x) {
return x<0?-x:x; }
6
求绝对值函数的模板
//9_0.cpp #include<iostream> using namespace std;
函 template<typename T> 数 T abs(T x) 模 { return x<0?-x:x; } 板 int main()
相关文档
最新文档