c++ --> static关键字总结
//Example 1
#include <iostream.h>
void fn();
static int n; //定义静态全局变量
void main()
{
n=;
cout<<n<<endl;
fn();
} void fn()
{
n++;
cout<<n<<endl;
}
//Example 2
//File1
#include <iostream.h>
void fn();
static int n; //定义静态全局变量
void main()
{
n=;
cout<<n<<endl;
fn();
} //File2
#include <iostream.h>
extern int n;
void fn()
{
n++;
cout<<n<<endl;
}
//Example 3
#include <iostream.h>
void fn();
void main()
{
fn();
fn();
fn();
}
void fn()
{
static n=;
cout<<n<<endl;
n++;
}
(3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
(4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
//Example 4
#include <iostream.h>
static void fn();//声明静态函数
void main()
{
fn();
} void fn()//定义静态函数
{
int n=;
cout<<n<<endl;
}
1)静态数据成员
//Example 5
#include <iostream.h>
class Myclass{
public:
Myclass(int a,int b,int c);
void GetSum();
private:
int a,b,c;
static int Sum;//声明静态数据成员
}; int Myclass::Sum=;//定义并初始化静态数据成员 Myclass::Myclass(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
Sum+=a+b+c;
} void Myclass::GetSum()
{
cout<<"Sum="<<Sum<<endl;
} void main()
{
Myclass M(,,);
M.GetSum();
Myclass N(,,);
N.GetSum();
M.GetSum(); }
(2)静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。上例中语句int Myclass::Sum=0;是定义静态数据成员;
(3)静态数据成员和普通数据成员一样遵从public,protected,private访问规则;
(4)静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,就可以操作它;
(5)静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:
<数据类型><类名>::<静态数据成员名>=<值>
(6)类的静态数据成员有两种访问形式:
<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>
如果静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员 ;
(7)静态数据成员主要用在各个对象都有相同的某项属性的时候。比如对于一个存款类,每个实例的利息都是相同的。所以,应该把利息设为存款类的静态数据成员。这有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局数据区的内存,所以节省存储空间。第二,一旦利息需要改变时,只要改变一次,则所有存款类对象的利息全改变过来了;
//Example 6
#include <iostream.h> class Myclass{
public:
Myclass(int a,int b,int c);
static void GetSum();/声明静态成员函数
private:
int a,b,c;
static int Sum;//声明静态数据成员
}; int Myclass::Sum=;//定义并初始化静态数据成员 Myclass::Myclass(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
Sum+=a+b+c; //非静态成员函数可以访问静态数据成员
} void Myclass::GetSum() //静态成员函数的实现
{
// cout<<a<<endl; //错误代码,a是非静态数据成员
cout<<"Sum="<<Sum<<endl;
} void main()
{
Myclass M(,,);
M.GetSum();
Myclass N(,,);
N.GetSum();
Myclass::GetSum();
}
<类名>::<静态成员函数名>(<参数表>)
c++ --> static关键字总结的更多相关文章
- 浅谈Static关键字
1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- Java Static关键字详解
提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- c++中static关键字的用法总结
类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...
- static关键字
static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...
- C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
随机推荐
- gm8180:arm linux启动加载模块、运行程序
1. init #!/bin/busybox ash#load modules mao 2013-02-16 14:12:48 echo "************************m ...
- weak alias
Weak Alias 跟 Weak Reference 完全没有任何关系,不过是我在看到 Weak Reference 的时候想到的而已. Weak Alias 是 gcc 扩展里的东西,实际上是函数 ...
- CAN总线基础知识(一)
1.CAN总线是什么? CAN(Controller Area Network)是ISO国际标准化的串行通信协议.广泛应用于汽车.船舶等.具有已经被大家认可的高性能和可靠性. CAN控制器通过组成总线 ...
- stm32开发之使用Keil MDK以及标准外设库创建STM32工程
‑6 MDK详细版本信息 ‑8保存路径的选择 ‑9选择芯片型号 ‑10拷贝启动代码选择 ‑11选择 Manage Comoonents ‑12编辑组并添加对应文件 ‑13工程管理文件列表 ‑14选择进 ...
- Java注释分类
Java注释分类 1.单行注释 //打印结果 System.out.println("结果是:"+result); 2.多行注释 /** * @autho ...
- 芝麻HTTP:pyspider的安装
pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI.脚本编辑器.任务监控器.项目管理器以及结果处理器,同时支持多种数据库后端.多种消息队列,另外还支持JavaScript ...
- hdu5887 Herbs Gathering
神他妈随便写写就能过- 暴力枚举每个取不取 两个剪纸: 1.当剩下可用的时间小于最少需要用的时间 跳出 2.当剩下的植物按照理想情况(甚至可以取一部分)得到的极限答案比已经求出的答案大 跳出 #inc ...
- linux iscsi配置
iSCSI 是一种 SAN的设备而 SAN的设备主要是提供 Server 存储体的空间.相较于传统的 SAN 是以光纤为传输媒体而 iSCSI(Internet SCSI)他是 IP-based 的数 ...
- Python 环境的搭建
Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:http://www.python.org/ 你可以在以下链接中下载 Python 的文档,你可以下载 ...
- AndroidStudio3.0无法打开Android Device Monitor的解决办法(An error has occurred on Android Device Monitor)
---恢复内容开始--- 打开monitor时出现 An error has occurred. See the log file... ------------------------------- ...