cocos2dx ios入口类_cocos2dx 入口函数分析

以下是main函数最开始的两段,也是cocos2d一开始执行的地方:

AppDelegate app;return Application::getInstance()->run();

接下来用代码对以上函数进行简单复原:

#include#include

using namespacestd;classAbstractBase

{public:virtual void denglu() = 0;virtual void houtai() = 0;virtual void tuichu() = 0;

};class Application :publicAbstractBase

{public:

Application()

{

sm= this;

}boolrun()

{

denglu();return true;

}static Application*GetInStance()

{

assert(sm);returnsm;

}static Application*sm;

};

Application* Application::sm =NULL;class AppDelegate :privateApplication

{public:void denglu() override{

cout<< "登录" <

}void houtai() override{

cout<< "后台运行" <

}voidtuichu()

{

cout<< "退出" <

}

};int main(int argc,char*argv[])

{

AppDelegate app;

Application::GetInStance()->run();

//return Application::GetInStance()->run();直接return在vs下会闪退,所以为了观察效果,去掉了return

getchar();return 0; }

输出:

可能会产生疑问,为什么不直接在Application中进行函数的复写,而是要单独拿出来,原因就是坚持对修改关闭,对扩展开放的原则,Application其实作用很大,跨平台相关的工作都是由他来进行的。

接下里对以上代码进行小结:

AppDelegate相当于子类,而Application::GetInstance会得到AppLication的指针。

又因为Application是AppDelegate的父类,所以最后一步就是父类指针调用子类覆写的虚函数,

但是这里不是直接调用的,而是通过run函数间接的调用,因为在run函数内部还会执行其他一些重要的功能.

AppDelegate app;这一步首先会创建Application的构造函数,然后才是AppDelegate的构造函数,也就是AppDelegate 对象包含了Application对象,如果在Application的构造函数中写入cout<

Application::GetInstance这一步的执行才会正确,这是关键所在.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值