第一、类静态成员
1.初始化
静态成员变量必须初始化
类的静态成员可以是公有的也可以是私有的:
无论公私必须在外部初始化。如
int A::_i = 1; //必须这样初始化 //初始化完毕才能赋值
2、访问
公有的外部可以直接访问(A::b=5;),私有的则不可以。
3、类成员间调用
类成员函数可以调用静态成员变量和静态成员函数,反之则不行。
#include<iostream>
#include<windows.h>
using namespace std;
class A
{
public:
A(int a,int x){b=a;c=x;}
void dip();
void dct(){ct();}
static int b;
static void ct();
private:
static int c;
};
int A::c=0;//初始化
int A::b=0;
void A::dip()
{
cout<<b<<" "<<c<<endl;
}
void A::ct()
{
cout<<"静态成员函数"<<endl;
}
void main()
{
A a(2,3);
a.dip();
A::b=5;
// A::c=6; //出错
a.dip();
cout<<A::b;
//cout<<A::c;//出错
A::ct();//直接调用静态成员函数
a.dct();//类成员函数调用静态成员函数
system("pause");
}
第二、变量和函数的总结:
(静态存储区
全局变量,静态变量会放在这个区域,事实上,全局变量也是静态的。)
1、当对函数的局部变量使用关键字static时,在整个程序运行期间,这个局部变量是永远占有分配内存,(由上括号得)像所有的局部变量对它们的函数私有。(局部变量在函数结束时候释放)。
2、当对文件域的变量使用static时,变量成为源文件的私有变量。然而和所有文件域变量一样,在整个程序执行期间为其分配的内存一直被这些变量占有。(全局变量嘛)
3、当在函数说明之前加上关键字static时,函数名对于说明该函数的源文件是私有的(也就以为着这个函数没又外部链接)。