C++学习摘要之五:静态成员

在一个类中还可以定义静态成员,但静态成员是所有对象公有的。静态成员分为静态数据成员和静态 成员函数。

1.静态数据成员

在类中定义静态数据成员的方法就是在该成员的前面加上关键字static.

定义静态数据成员的语句格式如下:

class 类名

{

……

static 类型说明符 成员名;

……

};

静态数据成员是类的所有对象共享的成员。静态数据成员所占的空间不会随着对象的产生而分配,也 不会随着对象的消失而回收。对静态数据成员的操作和类中一般数据成员的操作是不一样的,定义为私有 的静态数据成员不能被外界所访问。静态数据成员可由任意访问权限许可的函数所访问。

由于静态数据成员是类的所有对象共享的,而不从属于任何一个具体对象,所以必须对类的静态数据 成员进行初始化,但对它的初始化不能在类的构造函数中进行,其初始化语句应当写在程序的全局区域中 ,并且必须指明其数据类型与所属的类名,其初始化格式如下:

类型 类名::变量名=值;

对于在类的public部分说明的静态数据成员,在类的外部可以不使用成员函数而直接访问,但在使用 时必须用类名指明所属的类,其访问格式为:

类名::静态数据成员名

对于在类的非public部分说明的静态数据成员,则只能由类的成员函数访问,其访问方法与访问类中 普通数据成员的访问方法完全一样,但在类的外部不能访问。

时间: 2025-01-26 16:14:51

C++学习摘要之五:静态成员的相关文章

C++学习摘要之四:虚函数和多态

多态性与前面提到的数据封装和继承性共同构成了面向对象程序设计的三个重要机制. 1.静态联编与动态联编 由于函数重载的存在,当程序中出现调用同名函数时,编译器会根据函数的参数类型.个数决定调用 执行哪一个同名函数的代码,这种把一个函数的调用与适当的函数实现代码联系在一起的过程,叫做联编 .根据联编的实现阶段的不同,可将其分为静态联编和动态联编两种. 静态联编是在程序编译阶段确定一个函数调用与函数实现代码间的对应关系,这种对应关系确定下来 后,在程序运行过程中就根据这个对应关系去调用执行相应的函数代

C++学习摘要之六:友元函数与友元类

采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为 公有的,依此提供类与外界间的通信接口.但是,有时需要定义一些函数,这些函数不是类的一部分,但 又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数.除了友元函数外,还有 友元类,两者统称为友元.友元的作用是提供了工序的运行效率,但又破坏了类的封装性. 1.友元函数 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类 ,但需要在类的定义中加以声明,声明时

C++学习摘要之八:模板

模板(template)利用一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类 型,利用模板功能可以构造相关的函数或类的系列,因此模板也可称为参数化的类型.在C++语言中,模 板可分为类模板(class template)和函数模板(function template). 在程序中说明了一个函 数模板后,编译系统发现有一个相应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应 的形参,然后生成一个重载函数.该重载函数的定义体与函数模板的函数定义体相同,称之为模板函数(

JBossSeam学习系列之五:完结篇

由于前段时间使用JSF做了一个项目,不少使用JSF的兄弟们对JSF评价并不好,因此在学习的过程中一直在想,JSF究竟是不是应该继续学习继续研究使用下去,在看完Seam In Action的第三章后,这个星期又对Struts2简单学习了一下,终于决定结束JSF和JBoss Seam的学习了. 因为从JSF的学习和Struts2的学习对比中明显觉得JSF复杂,对于一个技术力量不是非常强的项目组来说,使用JSF当你遇到一些问题时,绝对是一件痛苦的事情. 从自己的实践中觉得JSF至少有两个致命伤: 1.

《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】

一,创建松耦合的组件 1."分解关注点"是MVC模式里面一个非常重要的特性.我们想要在应用程序里面创建的组件尽可能的独立,这样我们就能管理比较少的依赖关系.理想情况下,每个组件都是孤立的,不知道其他组件的存在,处理应用程序的其他领域仅仅通过抽象接口,这就是所谓的松耦合,它让我们的应用程序更加容易测试和修改.通过一个简单的例子可以帮助我们理解,假如我们想写一个发邮件的组件,暂且就把这个组件命名为MyEmailSender,接着我们实现一个接口,这个接口定义了所有需要发送邮件的功能,也暂且

JAVA/JSP学习系列之五(JDBC-ODBC翻页例子)

js|odbc|翻页 一.运行前准备 建议了一个MS SQLServer7数据库 DNS,名称为:Test_DB 数据库中有一个表:guestbook字段为:name(varchar),email(varchar),body(text) 数据库用户为sa 密码空,可以自己修改的. 二.代码 <%@ page contentType="text/html;charset=gb2312"%> <% //变量声明 java.sql.Connection sqlCon; //

C++学习摘要之七:运算符重载

C++语言中预定义的运算符的操作对象只能是基本数据类型,但是,在实际应用中,对于很多用户自定 义数据类型(如类)也需要类似的功能,这就需要对已有的运算符赋予多种含义,使同一个运算符具有作 用于不同类性的数据导致不同类型的行为,这就是运算符重载.因此,运算符重载的目的是设置C++语言 中的某一运算符,让它们之间并不冲突,C++语言会根据运算符的位置辨别应使用哪一种功能进行运算. 可见,运算符重载的优点是允许改变使用于系统内部的运算符的操作方式,以适应用户新定义类型的类似 运算. 运算符重载的实质是

系统学习hibernate之五:一对一外键关联

在hibernate中一对一外键关联跟多对一外键关联有很相似的地方, hibernate多对一外键关联先参考这个,然后只要是在*.hbm.xml里面加入以下代码: <many-to-one name="group" column="groupid" unique="true"/>, 就是加入unique="true"属性. 多对一外键关联中的*.hbm.xml里面加入以下代码:<many-to-one nam

C++学习摘要之二:构造函数和析构函数

构造函数和析构函数是类的两个特殊的成员函数 1.构造函数 构造函数(constructor)是类的一个特殊的成员函数,它与类名同名.当定义该类的对象时,构造函数将被系统自动调用用以实现对该对象的初始化. 构造函数不能有返回值,因而不能指定包括void在内的任何返回值类型. 构造函数的定义与其他成员函数的定义一样可以放在类内或类外. 构造函数的定义格式为: 类名(形参说明) {函数体} 构造函数既可以定义成有参函数,也可以定义成无参函数,要根据问题的需要来定. 注意:程序中不能直接调用构造函数,构