一、静态数据成员

  C++允许将类的数据成员定义为静态成员。静态数据成员是属于类的,整个类只有一个备份,相当于类的全局变量,能够被该类的所有对象共用。

  1.静态成员的声明

  在类数据成员的声明前加上关键字static,就将该成员指定成了静态数据成员。静态数据成员遵守public、private、protected访问权限的限定规则。如:

 class Account
{
public:
Account(); //构造函数
~Account(); //析构函数
//.....................
private:
static int number; //静态数据成员声明
//.....................
}

  2.静态数据成员的定义

  在类的声明中将数据成员指定为静态成员,只是一种声明,并不会为该成员分配内存空间,在使用之前应该对他进行定义。静态数据成员常常在类外进行定义,与类成员函数的定义方法一样。定义形式如:  

 //类型  类名::静态成员名;
//类型 类名::静态成员名 = 初始值
int Account::number; //定义静态成员并初始化为0

  注意:(1)在类外定义静态数据成员时,不能加上static限定词

     (2)在定义静态数据成员时可以指定他的初始值,若定义是没有指定初始值,系统将会自动赋上默认值

  3.静态数据成员的访问

  静态成员属于整个类,如果将他定义为类的公有成员,在类外可有两种方式访问。

  a)通过类名访问

    类名::静态成员名

  b)通过对象访问

    对象名.静态成员名

  4.静态数据成员与非静态数据成员的区别

  (1)非静态数据成员与对象关联,每个对象拥有独立的数据成员备份。静态数据成员与类关联,整个类只有一份静态数据成员备份,由全类所有对象共用。(C++会为对象的非静态数据成员分配独立的内存空间,而静态数据成员在内存中则只分配一次)

  (2)非静态数据成员只有在定义了对象之后才存在(也就是分配内存空间)。静态数据成员不属于单个对象,即使没有定义他所属类的任何对象时,就已经存在了。

  (3)非静态数据成员的作用域限定在定义对象的块作用域内,静态数据成员自他的定义开始到程序结束之前有效。

二、静态成员函数

  在类成员函数的原型前面加上static就将他定义成了静态成员函数。静态成员函数属于整个类,他只能访问该类的静态成员(包括静态数据成员和静态成员函数),不能访问非静态成员(包括非静态数据成员和非静态成员函数)。

  1.静态成员函数的声明定义

 class Account
{
public:
Account(); //构造函数
~Account(); //析构函数       
//.....................
     static int getNumber() //定义静态成员函数
       {
          return number; //访问静态数据成员
       } private:
static int number; //静态数据成员声明
//.....................
}

  2.调用方式

  静态成员函数的调用方式有两种:

  a)类调用方式

    类名::静态成员函数名(参数表);

  b)对象调用

    对象名.静态成员函数名(参数表);

  3.特别注意

  (1)和普通成员函数一样,静态成员函数也可以在类内或类外定义,还可以定义成内联函数

  (2)静态函数只能访问静态成员(包括静态数据成员和静态成员函数),不能访问非静态成员(包括非静态数据成员和非静态成员函数)

  (3)在类外定义静态成员函数时,不能加上static限定词

  (4)静态成员函数可以在定义类的任何对象之前被调用,非静态成员只有在定义对象后,通过对象才能访问

ps:如果有什么不对的地方,希望各位前辈同行能够批评指出,本人将感激不尽!!!!

C++学习之静态成员的更多相关文章

  1. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

  2. C#学习之泛型继承和静态成员

    想要理解这里有必要先将泛型类学习充分.这里讲解的是泛型类继承类的类型和静态成员. 在前面C#学习之泛型中,创建的LinkList<T>类实现了IEnumerable<T>接口. ...

  3. C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)

    ---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎 ...

  4. c++学习笔记之类和对象(三、static静态成员变量和静态成员函数)

    一.static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响.是有时候我们希望在多个对象之间共享数据,对象 a 改变 ...

  5. C# 静态成员和方法的学习小结

    C# 静态成员和方法的学习小结 数据成员:数据成员可以分静态变量.实例变量两种.静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对 ...

  6. 面向对象课后深入学习(C++ 类的静态成员详细讲解)

    今天在刚申请了博客,一下午都在写那个随笔,所以说好的来看c++的也放在了最后,下星期就考试了,这个类的静态成员是我不是很懂的,在网上 看到一片很详细的博客考下来回去慢慢看. 在C++中,静态成员是属于 ...

  7. .net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等

    1.类与对象的关系类是对一类事务的统称,是抽象的,不能拿来直接使用,比如汽车,没有具体指哪一辆汽车对象是一个具体存在的,看的见,摸得着的,可以拿来直接使用,比如我家的那辆刚刚买的新汽车,就是具体的对象 ...

  8. C++学习10 static静态成员变量和静态成员函数

    一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干.但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享. 可以使用全局 ...

  9. Java学习笔记9---类静态成员变量的存储位置及JVM的内存划分

    笔记8提到了类静态成员变量的访问方式,但静态成员变量存储在哪里呢?在网上查阅不少资料,发现好多内容都是过时的了,其中主流观点是静态成员变量存放在方法区.JDK8之前,静态成员变量确实存放在方法区:但J ...

随机推荐

  1. PHP获取某年第几周的开始日期和结束日期

    http://blog.csdn.net/qq_27080247/article/details/50835956 /** * 获取某年第几周的开始日期和结束日期 * @param int $year ...

  2. 联想G480笔记本安装系统

    联想G480笔记本安装系统 联想G480笔记本,配置i5双核四线程处理器,4G内存,500G硬盘,USB3.0接口,NVIDIA GeForce GT 610M+Intel HD Graphics 3 ...

  3. Sqoop安装配置及数据导入导出

    前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...

  4. 利用JAXB实现java实体类和xml互相转换

    1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...

  5. Python 练习 21

    #!/usr/bin/python # -*- coding: UTF-8 -*- h = 0 leap = 1 from math import sqrt from sys import stdou ...

  6. CentOS怎样查看系统信息

    一.查看系统版本和核心版本 1 登陆CentOS,启动终端. 2 登陆root帐户,输入 cat  /etc/redhat-release,即可显示系统版本. 3 输入 uname  -r ,可以查询 ...

  7. IDE显示无法打开源文件时解决方案

      解决方法:加上具体地址信息将 #include <qwidgetresizehandler_p.h> 改为 #include <C:\Users\INnoVation\Deskt ...

  8. Eclipse管理Java工程(j2se/j2ee/maven)

    Eclipse管理J2SE/J2EE(Maven)项目 eclipse是一个集成开发工具,有编译,运行,打包部署等功能.eclipse可以新建多种项目,不同的项目有不同的IDE层次结构,方便用户管理资 ...

  9. C语言实现进制转换

    #include<stdio.h> int main() {     char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B ...

  10. intel的网卡故障

    现象: 机器键盘接入,敲入无反应:机器无法ping通,整台机器假死状态. 查看message的日志,日志为如下内容: Aug :: TSMIS-CF kernel: ::19.0: eth0: Det ...