private,空,protected,public 权限
使用private修饰符可以完全隐藏类的成员,使得不能从类外直接访问它们 。
不使用修饰符允许同一个包里的任何类直接访问类的成员,但是其国外java代码例子经典他包中的类不可以 。
使用protected修饰符允许任何包中的子类或同一包的类的成员 。
使用public修饰符允许任何类访问类的成员 。
public在程序语言中基本都表示全局变量或者全局函数,他的本意是“公共的”的意思,他表示某个变量或者函数是全局函数,例如:public int a 表示a这个整形变量是全局变量,再例如,声明一个全局函数:public function checked()
........
end function
表示checked这个函数是全局函数
staticC++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static 。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用 。
一、面向过程设计中的static
1、静态全局变量
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量 。国外java代码例子经典我们先举一个静态全局变量的例子,如下:
//Example 1#include iostream.hvoid fn();static int n; //定义静态全局变量void main(){ n=20; coutnendl; fn();}void fn(){ n++; coutnendl;}
静态全局变量有以下特点:
该变量在全局数据区分配内存;
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的 , 除非它被显式初始化);
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量 。对于一个完整的程序,在内存中的分布情况如下图:
代码区
全局数据区
堆区
栈区
一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区 。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静 态局部变量)也存放在全局数据区 。全局数据区的数据并不会因为函数的退出而释放空间 。细心的读者可能会发现,Example 1中的代码中将
static int n; //定义静态全局变量
改为
int n; //定义全局变量
程序照样正常运行 。
的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:
静态全局变量不能被其它文件所用;
其它文件中可以定义相同名字的变量 , 不会发生冲突;
您可以将上述示例代码改为如下:
//Example 2//File1#include iostream.hvoid fn();static int n; //定义静态全局变量void main(){ n=20; coutnendl; fn();}//File2#include iostream.hextern int n;void fn(){ n++; coutnendl;}
编译并运行Example 2,您就会发现上述代码可以分别通过编译 , 但运行时出现错误 。试着将
static int n; //定义静态全局变量
改为
int n; //定义全局变量
再次编译运行程序,细心体会全局变量和静态全局变量的区别 。
2、静态局部变量
在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量 。
我们先举一个静态局部变量的例子,如下:
//Example 3#include iostream.hvoid fn();void main(){ fn(); fn(); fn();}void fn(){ static n=10; coutnendl; n++;}
通常 , 在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存 。但随着程序退出函数体 , 系统就会收回栈内存,局部变量也相应失效 。
但有时候我们需要在两次调用之间对变量的值进行保存 。通常的想法是定义一个全局变量来实现 。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便 。
推荐阅读
- b站锁直播间,b站直播间被锁定怎么回事
- qt中只能写c语言吗,qt可以编译c++吗
- 韩国kt服务器购买指南,韩国kt注册
- mysql表存到redis,把表中的所有数据放到redis
- php获取表格单元格数据 php获取数据库内容
- 老显卡导致没有声音怎么办的简单介绍
- 小程序退订蛋糕怎么退钱,小程序的订单怎么退
- 搞直播设备,直播设备有什么用
- linux中命令man linux中命令是如何执行的