静态对象,与数据共享。
静态对象无非也是一种静态变量!它的作用域只在当前的源文件中有效,而不能在其他源文件中使用。
静态变量的出现就是为了解决在不用的源文件中需要使用名字相同的变量。
#include <iostream> using namespace std; class A { public: void f() {cout<<"fe"<<endl;} }; static A a; int main() { cout << "Hello World!" << endl; a.f(); return 0; }
输出:hello world
fe
#include <iostream> using namespace std; class A { public: static A *a; void f() {cout<<"fe"<<endl;} }; A* A::a=new A(); //static A a; int main() { cout << "Hello World!" << endl; A b; b.a->f(); return 0; }
输出和上面一样。
静态对象和静态成员变量的作用域是一样的,参考静态成员变量。
静态对象的妙用就是使所有数据都变成静态。就是一个对象可以多次调用。
下面摘自别的博客
让静态对象来维护你的数据
工作中希望将一些连续的对象数据保存在内存中,
常用的方法是创建一个集合类(Collections),最常用的是ArrayList或者他的继承类。
但是如果我们需要在多个对象中同时使用这个实例,就显得比较麻烦,
因为我们不可能将他在实例化一遍,
那么我们只能可以用它作为最初实例化此对象的一个属性来使用,是不是觉得很麻烦呢?
好,那我介绍一种将其作为一个静态对象的存储方式。
Example:https://files.cnblogs.com/wanghualiang/PersistentMemoryObject.rar
首先,创建一个对象同时创建此对象的静态实例:
public class PersistentObject
{
public static PersistentObject persistentObject = new PersistentObject();
}
创建一个ArrayList对象。
public ArrayList classes = new ArrayList();
建立操作集合的静态函数
public static void AddClass(ParameterClass subclass)
{
persistentObject.classes.Add(subclass);
}
public static void PrintClass()
{
foreach (ParameterClass subclass in persistentObject.classes)
{
PrintParameterClass(subclass);
}
}
public static ParameterClass GetClassByID(string ID)
{
foreach (ParameterClass subclass in persistentObject.classes)
{
if (subclass.ID.Equals(ID))
return subclass;
}
return null;
}
public static bool WriteClassByID(string ID, string Field1)
{
foreach (ParameterClass subclass in persistentObject.classes)
{
if (subclass.ID.Equals(ID))
{
lock(subclass)
subclass.Field1 = Field1;
PrintParameterClass(subclass);
return true;
}
}
return false;
}
public static void PrintParameterClass(ParameterClass pc)
{
Debug.Write(pc.ID+" ");
Debug.Write(pc.Field1+" ");
Debug.Write(pc.Filed2+" ");
Debug.Write(pc.Field3+" ");
Debug.Write("
");
}
OK!我们的静态持久对象就建立起来了.
附表
public class ParameterClass
{
public string ID;
public string Field1;
public string Filed2;
public string Field3;
public ParameterClass(string ID)
{
//
// TODO: 在此处添加构造函数逻辑
//
this.ID = ID;
}
}