最新第9章 群体类和群体数据的组织教程文件
第九章-群体管理精选全文
同的目标;(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章 群体类和群体数据的组织
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-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群体类和群体数据的组织
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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()