您的位置:首页 > 编程语言 > C语言/C++

C++类静态数据成员与类静态成员函数

2013-07-04 17:53 197 查看
如果把类中的函数都定义成静态函数或者静态数据成员,这样相当于在编译时就分配了空间,这样不需要实体对象也可以调用类中的函数了。

并且静态数据成员是类所有的,是一个全局变量,而且不是对象所有的,并且是唯一的,和继承类共享一个内存空间。

声明为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;
    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: