cocos2d-x中main函数AppDelegate app解释
来源:互联网 发布:多头螺纹加工怎么编程 编辑:程序博客网 时间:2024/06/08 06:50
博主是一位非计算机相关专业的大三党,由于自己的兴趣爱好,决定走上程序员之路.主要学的是c++.目前来说还是个小白.前几天自己看cocos2d源代码的时候,发现了一个自己怎么也看不懂的调用方式。在百度搜索了很多资料,也并没有看到有解释的很清楚的文章。所以自己决定发表一下,希望能帮助那些遇到和我同样问题的人。由于水平有限,这是我第一篇文章,有错误的地方欢迎各位大牛指出,也能帮助我自己提高。接下来是正文:
打开cocos2d-x工程,找到了它的main函数,代码很少,但这很少的代码却迷惑了我很久。
AppDelegate app;
return Application->getInstance()->run();
这两行代码几乎就是整个main函数的主体,用vs2013按f12,查看了AppDelegate和Application,发现了还有一个类:ApplicationProtocol。
这三者之间存在如下继承关系 :ApplicationProtocol<-----Application<---------AppDelegate.(“<-----”代表继承关系)
ApplicationProtocol这个类里面有很多纯虚函数,作为接口存在,其中一个这就是关键。
回到main函数中,查看run()方法源码,发现里面有调用了applicationDidFinishLaunching()这个函数,代码如下:
因为在ApplicationProtocol中是纯虚函数,那么我们就要找到真正函数的实现。首先看子类Application,并未找到applicationDidFinishLaunching(),那么我们继续找。来到AppDelegate中,很幸运的找到了:
说明run()中调用的就是AppDelegate中的applicationDidFinishLaunching();
由于在Application中并未找到applicationDidFinishLaunching(),说明Application类里面没有重写,Application依旧是一个抽象类且不能实例化。那么是如何用Application->getInstance()获取对象来调用run()的呢?
这时候我们看到Application的声明,里面有一个静态Application指针,再看Application的构造函数源代码
其实关键就在最后一句,sm_pSharedApplication=this。
以下是我个人的理解:
由于多态的特性,子类AppDelegate app,app也就是父类Application的对象,构造函数中sm_pSharedApplication=this,this指针指向的其实也就是app对象的地址,那么sm_pSharedApplication也指向app,
getInstance()返回sm_pSharedApplication,最后也就是通过app->run().
- cocos2d-x中main函数AppDelegate app解释
- 关于java中main函数的解释
- c中main函数的参数解释
- Cocos2d-x之 CCApplicationProtocol-->CCApplication-->AppDelegate
- Cocos2d-x 3.0-AppDelegate入口类
- Cocos2d-x-3.4 从零开始之 AppDelegate.cpp
- 转-cocos2d-x 之 AppDelegate学习
- Cocos2d-x中的AppDelegate.cpp文件解析
- main() 函数解释
- 【cocos2d-x 3.x】01-从main函数探讨cocos2d-x 3.x是如何运行起来的
- cocos2d-x 函数指针 typedef CCLayer* (*NEWTESTFUNC)() 解释
- cocos2d-x main重定义
- cocos2d-x main重定义
- cocos2d-x main.h详解
- cocos2d-x main.cpp详解
- Cocos2d-x中关于do{} while(0) 的解释
- cocos2d-x中各种动作和特效的详细解释
- cocos2d-x中Moveby和Moveto的解释
- HTML 超级链接详细讲解
- c语言中,关于随机函数的使用详解
- 学习Java的路线建议
- Mysql----区分大小写问题
- 【转】Delphi程序员如何找到高薪的工作?
- cocos2d-x中main函数AppDelegate app解释
- ruby安装
- LDD3源码分析之异步通知
- java加解密之DES多种使用方式
- java前后端交互解决跨域问题
- 获取浏览器url的参数
- 使用systemctl命令启动和关闭mysql
- sqlite3 语句总结
- Xftp 传输中文乱码解决办法