- 4
- 0
- 约2.16千字
- 约 13页
- 2016-10-22 发布于河南
- 举报
静态成员与类模板
类的静态成员 问题的引入 在某些情况下,某些特殊类类型的所有对象可能需要访问同一个变量。例如:要计数在程序的任意一点总共创建了多少个此类类型的对象。 能否采用定义全局变量的方式来实现? 静态成员的使用 可定义静态成员变量,实现同一类的所有对象共享一个变量。 在类体中的数据成员声明前面加上关键字static,就使该数据成员成为静态的成员。 static int Student_Num; 静态数据成员被当作该类类型的全局变量。对于非静态数据成员每个类对象都有自己的拷贝,而静态数据成员只有一份由该类类型的所有对象共享访问的空间。 静态成员的使用 由于类的静态成员变量并不占类对象本身的存储空间,而是独立存在的。因此在对象定义的时候,也不会为静态成员变量分配内存空间。故静态成员要单独在类外初始化。 int CStu::Student_Num; 初始化可以给静态成员赋值,如果不赋值默认为0; 静态成员的优点 可以实现信息隐藏,静态成员可以是private 成员,而全局变量不能。 静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性。 静态成员函数 同样,成员函数也可以被定义为静态的。只要在声明前加上关键字static。 其主要的作用就是为了处理静态成员变量的。 静态成员函数属于类,而不属于某个对象,因此静态成员函数没有this指针。 调用静态函数时,必须加上域运算符“::”。 CStu::ShowNum(); 类模板 问题的引入 对于类的声明来说,存在这样的问题——有时候有多个类,其功能是相同的,仅仅是数据成员的数据类型不同。 如下面这个比较两个数类: class Compare {private: int a,b; public: Compare(int x,int y); int Max(); } 类模板的提出 C++为了减少重复工作,添加了模板(template)功能,有效的解决了上述问题。 将类的定义方法改为: template class 类型参数名 template是关键字,表示模板 后面的尖括号内是参数列表,class表示后面是类型参数。 类模板的定义区别于普通类的定义,不能将成员函数的说明和实现分开在不同的文件里。否则会产生连接错误。通常要统一写在一个.h文件中。 编写每个成员函数的具体实现时,应写成类模板格式: template class 虚拟类型参数 函数虚拟类型 类名虚拟类型参数::函数名(参数表) 类模板的使用 普通类的使用——类对象的定义: compare a(10,20); 类模板的使用时,对象的定义是否能写成这样?系统是否能自动判断参数的类型? 类模板的使用: compare int a(10,20); 类模板创建的步骤 构建类模板时,先写一个普通类,一般结构简单,不易出错。 将类中需要变更的类型名(如int要替换为float等)改成自己写的虚拟名字。 在类声明前加上一行,格式为: template class 虚拟类型参数 在类模板外定义成员函数时,应写成类模板格式: template class 虚拟类型参数 函数虚拟类型 类名虚拟类型参数::函数名(参数表) 注意: 类模板的参数可以有一个,也可以有多个,每个类型前必须加class: template class Num1, class Num2 class compare {……}; 在对象定义时应写为: compare int, double a; 例子中的numtype,Num1,Num2只是一个参数名,可以随便起,只要是合法的标识符就行。他并不是一个实际的类型名,而只是一个虚拟的名字。 由于numtype ,Num1,Num2只是一个参数,因此在实际使用的时候,它将被实际的类型(int,float,char……)所取代。从而实现一类多用。 * * 这样做会有什么问题? 由于静态成员函数没有this指针,所以他无法访问类中的非静态成员变量及函数 class Compare {private: double a,b; public: Compare(double x, double y); double Max
您可能关注的文档
最近下载
- 关节置换课件.pptx VIP
- 脉冲微分方程边值问题解的存在性:理论与应用新探.docx VIP
- 2025高考物理步步高同步练习必修3第十章电势差与电场强度的关系含答案.docx VIP
- 人教版高中数学必修一章节思维导图全套.pdf VIP
- 深度解析(2026)《GAT 147-2019法医学 尸体检验技术总则》.pptx VIP
- 变分法研究几类分数阶脉冲微分方分程边值问题解的存在性.docx VIP
- 《中小学生欺凌防治制度机制指引》全文.pdf VIP
- 普通话水平考必试读词语表.doc VIP
- 汽车租赁合同模板范本.docx VIP
- 2025高考物理步步高同步练习选修1第一章 动量专题强化3 弹簧—小球模型 滑块—光滑斜(曲)面模型含答案.docx VIP
原创力文档

文档评论(0)