#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
class CC_DLL CCApplicationProtocol//祖父类
{
public:
virtual ~CCApplicationProtocol(){}
virtual bool applicationDidFinishLaunching() = 0;
virtual void applicationDidEnterBackground() = 0;
virtual void applicationWillEnterForeground() = 0;
}
class CC_DLL CCApplication: public CCApplicationProtocol //父类,未覆写,仍为纯虚
{
public:
CCApplication();
virtual ~CCApplication();
virtual int run();
static CCApplication* sharedApplication();
....
protected:
.....
static CCApplication *sm_pSharedApplication;
};
CCApplication::CCApplication()
{
...
sm_pSharedApplication = this;
}
CCApplication* CCApplication:: sharedApplication()
{
....
return sm_pSharedApplication;
}
----
----
class AppDelegate:private cocos2d::CCApplication //子类
{
public:
AppDelegate();
virtual ~AppDelegate();
//是覆写还是新?,去父类看看 ,父类没有,去祖父类看看,祖父类有,确定此处是覆写
virtual bool applicationDidFinishLaunching();//拿起手机来,屏幕点亮,点某一APP,进入加载的过程。然后导演出来了场景跑起来了。
virtual void applicationDidEnterBackground();//按home进入后台
virtual void applicationWillEnterForeground();//又从后台调出来了。
...
};
bool AppDelegate::applicationDidFinishLaunching()//这个是真正的入口
{
CCDirector* pDirector = CCDirector::sharedDirector();//导演出现了
....
CCScene *pScene = HelloWorld::scene();//场景出现了
//...
pDirector->runWithScene(pScene);//导演把场景跑起来了。
//从这里开始下手写代码
}
--
--
int CCApplication::run()//包装了一层入口
{
....
if(!(this->applicationDidFinishLaunching()))
{
return 0;
}
....
}
//入口
int APIENTRY _tWinMain()
{
//create the application instance
AppDelegate app;//建立子类对象,建立子类对象的同时,会对该子类对象父类部分的static父类指针成员进行赋值,把该子类对象赋给了该static父类指针。
//完成了第三步的语法条件,让父类指针指向子类对象。
....
//父类指针指向子类对象
//用这个父类指针去调用虚函数
return CCApplication::sharedApplication()->run();//怎么促使子类对象去调用
}
//1.父类中有虚函数
//2.子类覆写了父类的虚函数
//3.被子类对象赋值的父类指针
//4.用父类指针调用虚函数。直接调用或者间接调用
//入口是用多态实现的,
//static,的碎知识应用。要好好过一遍
//入口实现画图,主线与支线图
//cocos为什么苦口婆心的干这么一件事 43:39
//接口层,是平台无关的 实现了接口的统一
CCApplicationProtocol
//中间层,跨平台 ,框架帮你干了
CCApplication
//实现层,保证 一套代码在多个平台都可以运行
AppDelegate