如果把类中的函数都定义成静态函数或者静态数据成员,这样相当于在编译时就分配了空间,这样不需要实体对象也可以调用类中的函数了。
并且静态数据成员是类所有的,是一个全局变量,而且不是对象所有的,并且是唯一的,和继承类共享一个内存空间。
声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。
在静态成员函数之中使用静态成员,不能使用this指针。
下面看下代码:
class PrizeList :public CCLayer {
public:
static int jsonLength;
private:
string IP = "http://192.168.1.5";
string serverIP = IP+"/prize/list.page";
public:
virtual bool init();
static cocos2d::CCScene* scene();
CREATE_FUNC(PrizeList);
void requestService();
void displayPrizeList();
static size_t writeData(void *ptr,size_t size, size_t nmemb, void *userData);
};
#include "PrizeList.h"
//静态数据成员变量的初始化在.cpp文件
int PrizeList::jsonLength = 0;
这样使用静态数据成员变量实现了在静态成员函数中传递参数:
在下面的2个方法中使用了静态数据成员变量。
void PrizeList::displayPrizeList()
{
string filePath = CCFileUtils::sharedFileUtils()->getWritablePath()+"myPrizeList.txt";
char str[9999];
CCLOG("jsonLength %d",this->jsonLength);
FILE *fp = fopen(filePath.c_str(), "rb");
//fgets(str, this->jsonLength, fp);
}
size_t PrizeList::writeData(void *ptr, size_t size, size_t nmemb, void *userData)
{
static int total;
static int flag = 1;
char *data = NULL;
data = (char *)ptr;
string filePath = CCFileUtils::sharedFileUtils()->getWritablePath()+"myPrizeList.txt";
FILE *fp = fopen(filePath.c_str(), "ab");
int writeen = fwrite(ptr, size, nmemb, fp);
fclose(fp);
CCLOG("data: %s",data);
CCLOG("write_data 第%d次",flag++);
CCLOG("写入字节数量是 %d",writeen);
total += writeen;
CCLOG("写入字节总数量是 %d",total);
CCLOG("写入字节总数量是 %dk",total/1024);
jsonLength = total;
return writeen;
}