静态成员:
声明: static 类型 变量名;
作用域:所在类,不属于任何一个类对象。
存在意义:提供一种“全局”变量机制;
访问方法:如果是public:在类外通过对象或者通过类名;如果是private:需要通过类的共有函数或者静态成员函数调用;
赋值定义:必须赋初值,赋初值只能在类外(不论是private,public都可以)格式为 类型 类名::静态成员变量=初值;如果不赋初值造成的后果就是链接
不成功,究其原因就是不赋初值意味着只是纯粹的声明没有定义,就如同一个函数只要头文件,但是没有函数体一样。
静态函数:
声明:static 返回值 函数名 参数列表;
作用域:所在类,不属于任何一个类对象;
访问方法:同static成员;
存在意义:调用静态成员,实现数据的封装;当然非静态成员函数也可以调用静态成员,只是使用非静态成员函数的话前提就是需要创建一个对象;再是可以
作为回调函数存在,因为静态成员函数如果是public的则就是全局的。(欢迎各位留言说明静态函数存在的意义)
参考类定义
#include <iostream>
using namespace std;
class static_demo
{
public:
static_demo(int init);
private:
static int private_a;
public:
static int public_a;
public:
int a;
static void setPrivateStaticValue(int value);
int getPrivateStaticValue();
};
void static_demo::setPrivateStaticValue(int value)
{
private_a = value;
}
int static_demo::getPrivateStaticValue()
{
return private_a;
}
static_demo::static_demo(int init)
{
private_a = init;
}
int static_demo::public_a = 100;
int static_demo::private_a = 10000;
int main()
{
cout<<"static public_a "<<static_demo::public_a<<endl;
static_demo static_instance(1000);
static_instance.setPrivateStaticValue(10);
cout<<"static_instance.private_a"<<static_instance.getPrivateStaticValue()<<endl;
cout<<"publi_instance.public_a"<<static_instance.public_a<<endl;
return 0;
}