static(静态的)
修饰局部变量:
(static修饰局部变量只改变生命周期,不改变作用域
会改变局部变量的存储位置,从而使得局部变量的生命周期变长,)
本质:
普通的局部变量创建都是放在栈区的,,这种局部变量进入作用域时创建,出了作用域就销毁。
static修饰的局部变量则放在静态区中他改变局部变量的存储位置,从而使得变量的生命周期变长,延长至程序的结束才销毁
修饰全局变量:
会改变全局变量的链接属性,从而使得全局变量的作用域变小,
本质:
全局变量的本身具有外部链接属性,在A文件中定义,在文件中可以改变链接属性来使用,
但是如果被static修饰后外部链接属性就会改变内部链接属性,此时改变量只能在自己的源文件使用
static修饰函数变化和全局变量一样
数据成员定义为静态
一般形式
static 数据类型 名称;
作用
一般我们希望同类的各对象中的数据成员的值是一样的,就可以定义为静态数据成员
说明
static修饰的数据成员,不属于任何一个对象,所有的对象都可以引用他,
静态的数据成员只战友一份内存,
只有在定义对象时才会为对象的数据成员分配空间,但是静态的数据成员在类中定义之后,即使不定义对象也会为静态数据成员分配空间
静态数据成员只能在类外初始化,
一般形式
数据类型 类名 ::数据成员名=初值;
注意
只有声明变量时才用static ,定义时不用static
不能用参数初始化表对静态数据成员初始化
访问静态数据成员,
累外访问可以通过对象明访问,也可以通过类名引用(如果该静态数据成员为是私有的,只能通过公用的成员函数访问)
静态成员函数访问静态数据成员
静态成员函数和静态数据成员一样的,是类的一部分,不是对象的一部分,
静态成员函数和普通成员函数的根本区别
普通成员函数有this指针,而静态成员函数没有this指针,所以静态成员函数不能访问非静态数据成员
静态成员函数主要用来访问静态数据成员,而不能访问非静态数据成员
非静态成员函数可以访问所有数据成员
一般我们用静态的访问静态的,非静态访问非静态
友元函数
在累内用friend声明,此函数为友元函数 友元函数可以访问类内私有成员
一般形式
friend 返回值类型 函数名(参数列表);
在类中声明时需要friend定义时就是普通函数定义
友元类
将一个类声明为另一个类的朋友 ,如果b是a的友元类,b中的所有函数都是a类的友元函数,可以访问a中所有的成员
一般形式
friend 类名;
注意
友元关系是单向的,不能传递的