學習Cocos2dx引擎之CCApplication

###寫在開頭的話 本人工做是有5,6年了,可是C++也荒廢了5.6年,此次從新拿起來忘記了好多東西.有什麼地方說的不對的地方請各位高手指點一下.本人很是感謝. ###CCApplication的來源html

CCApplication繼承自CCApplicationProtocol,這個咱們先無論它,咱們本身寫個例子ios

1.新建CCApplication類app

/* * CCApplication.h * * Created on: 2013-9-21 * Author: sjbwybls */框架

#ifndef CCAPPLICATION_H_函數

#define CCAPPLICATION_H_this

#include <iostream>spa

#include <string>.net

namespace TestCocos2dx {指針

using namespace std;code

class CCApplication { public: CCApplication(); virtual ~CCApplication(); int run(); static CCApplication * sharedApplication() { cout<<"return static app"<<endl; return sm_pSharedApplication; }

protected: static CCApplication * sm_pSharedApplication;

};

} /* namespace TestCocos2dx */

#endif /* CCAPPLICATION_H_ */

/* * CCApplication.cpp * * Created on: 2013-9-21 * Author: sjbwybls */

#include "CCApplication.h"

namespace TestCocos2dx {

CCApplication *CCApplication::sm_pSharedApplication = 0;

CCApplication::CCApplication() { cout << "app ctor" << endl; sm_pSharedApplication = this; }

CCApplication::~CCApplication() { cout << "app destroy" << endl; sm_pSharedApplication = NULL; }

int CCApplication::run(){ cout << "run() function, sm_pSharedApplication = " << sm_pSharedApplication << endl; return 0;

}

} /* namespace TestCocos2dx */

  1. 新建CCDerivedCCApplication類繼承自CCApplication

/* * CCDerivedCCApplication.h * * Created on: 2013-9-21 *
Author: sjbwybls */

#ifndef CCDERIVEDCCAPPLICATION_H_

#define CCDERIVEDCCAPPLICATION_H_

#include <iostream>

#include <string>

#include "CCApplication.h"

namespace TestCocos2dx {

class CCDerivedCCApplication: public TestCocos2dx::CCApplication { public: CCDerivedCCApplication(); virtual ~CCDerivedCCApplication(); };

} /* namespace TestCocos2dx / #endif / CCDERIVEDCCAPPLICATION_H_ */

/* * CCDerivedCCApplication.cpp * * Created on: 2013-9-21 *
Author: sjbwybls */

#include "CCDerivedCCApplication.h"

namespace TestCocos2dx {

using namespace std;

CCDerivedCCApplication::CCDerivedCCApplication() { cout<<"DerivedCCApplication ctor"<<endl;

}

CCDerivedCCApplication::~CCDerivedCCApplication() { cout<<"DerivedCCApplication destory"<<endl; }

} /* namespace TestCocos2dx */

3.最後創建main.cpp

/* * main.cpp * * Created on: 2013-9-21 * Author: sjbwybls */

#include "CCApplication.h"

#include "CCDerivedCCApplication.h"

using namespace TestCocos2dx;

int main() { CCApplication::sharedApplication()->run(); CCDerivedCCApplication app; CCApplication::sharedApplication()->run(); }

4.輸出結果 return static app run() function, sm_pSharedApplication = 0 app ctor DerivedCCApplication ctor return static app run() function, sm_pSharedApplication = 0x7fff56b50c20 DerivedCCApplication destory app destroy

5.分析 main.cpp中的實例化了一個CCDerivedCCApplication的實例app。 調用流程: 返回靜態父類實體並執行run函數

父類構造函數 子類構造函數 執行run函數 析構子類函數 析構父類函數

6.結論 先從C++的語法說明: C++中靜態函數不會觸發構造函數 聲明一個對象不須要new.便可觸發構造函數([具體可參考][1]) 父類跟子類的 構造函數調用關係爲 先初始化父類構造函數再初始化子類構造函數 析構函數爲 恰好相反 先調用子類析構函數再調用父類析構函數 CCApplication的用法 CCApplication app; //先調用Application必須先初始化Application,也能夠從子類調用 CCApplication::sharedApplication()->run(); //最後執行run方法才能拿到初始化以後的Application,負責就只會等到空指針錯誤,這個也就是Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)錯誤出現的緣由吧,但願高手拍磚

本文啓發自:[初學試試看cocos2dx的TestCPP框架(1)][2] [1]:http://www.metsky.com/archives/580.html "聲明類實例用new與不用new的區別" [2]:http://blog.csdn.net/hayyoung/article/details/8536719 "初學試試看cocos2dx的TestCPP框架(1)"

相關文章
相關標籤/搜索