cocos2dx 入口函数分析
以下是main函数最开始的两段,也是cocos2d一开始执行的地方:
AppDelegate app;
return Application::getInstance()->run();
接下来用代码对以上函数进行简单复原:
#include<iostream>
#include<assert.h>
using namespace std;
class AbstractBase
{
public:
virtual void denglu() = 0;
virtual void houtai() = 0;
virtual void tuichu() = 0;
}; class Application :public AbstractBase
{
public:
Application()
{
sm = this;
}
bool run()
{
denglu();
return true;
}
static Application* GetInStance()
{
assert(sm);
return sm;
} static Application* sm;
};
Application* Application::sm = NULL;
class AppDelegate :private Application
{
public:
void denglu() override
{
cout << "登录" << endl;
}
void houtai() override
{
cout << "后台运行" << endl;
}
void tuichu()
{
cout << "退出" << endl;
}
}; 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<<this<<endl; 在main函数中写cout<<&app<<endl;地址是相同的。所以
Application::GetInstance这一步的执行才会正确,这是关键所在.
cocos2dx 入口函数分析的更多相关文章
- u-boot-1.1.6第2阶段入口函数start_armboot分析
学习目标: 1.分析u-boot-1.1.6第2阶段入口函数void start_armboot (void),熟悉该函数所实现的功能 2.为后面能够掌握u-boot-1.1.6如何启动内核过程打下基 ...
- twemproxy源码分析1——入口函数及启动过程
最近工作中需要写一个一致性哈希的代理,在网上找到了twemproxy,结合网上资料先学习一下源码. 一.Twemproxy简介 Twemproxy是memcache与redis的代理,由twitter ...
- 1.2. chromium源代码分析 - chromiumframe - 入口函数
ChromiumFrame的入口函数在main.cpp中,打开main.cpp.中包含3个类和_tWinMain函数._tWinMain就是我们要找的入口函数.我做了部分注释: int APIENTR ...
- module_init宏解析 linux驱动的入口函数module_init的加载和释放
linux驱动的入口函数module_init的加载和释放 http://blog.csdn.net/zhandoushi1982/article/details/4927579 void free_ ...
- jQuery分析(2) - $工厂函数分析
前言 从这节进入jQuery的世界,首先从jQuery的入口函数开始了解jQuery()或$是如何运作的,这里我给出了一个最小的例子来分析. 回忆 在进入分析代码前我们回想下jQuery的使用方法有哪 ...
- C++的入口函数
我们最开始学习c++时,就知道要写一个main()函数,并且知道这是整个函数的入口,但是c++不只有main()函数这一个入口. 一.对于不同的程序函数入口是不同的. main()是WINDOWS的控 ...
- [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND
原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...
- [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND
原文:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUA ...
- 程序入口函数和glibc及C++全局构造和析构
分类: CRT Machnasim 2011-06-15 17:45 144人阅读 评论(0) 收藏 举报 c++汇编linuxlist语言编译器 1,程序入口函数和初始化 操作系统在装载可执行文件后 ...
随机推荐
- 【LeetCode】面试题 16.11. 跳水板 Diving Board (Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学 日期 题目地址:https://leetcode ...
- 【LeetCode】152. Maximum Product Subarray 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双重循环 动态规划 参考资料 日期 题目地址:htt ...
- 【LeetCode】661. Image Smoother 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:暴力解决 日期 题目地址:https://l ...
- 【LeetCode】151. Reverse Words in a String 翻转字符串里的单词(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.co ...
- World is Exploding(hdu5792)
World is Exploding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- C# RabbitMQ的使用
本文目的如题. 安装 先说一下RabbitMQ的安装,建议使用Docker镜像安装,Docker安装的好处是不管Windows系统还是Linux,安装步骤少,安装方法相同,不容易出错.使用下面的命令就 ...
- 第四十四个知识点:在ECC密码学方案中,描述一些基本的防御方法
第四十四个知识点:在ECC密码学方案中,描述一些基本的防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-44-d ...
- Momentum and NAG
目录 Momentum Nesterov accelerated gradient NESTEROV 的另外一个方法? Momentum Momentum的迭代公式为: \[v_t = \gamma ...
- matplotlib 进阶之Customizing Figure Layouts Using GridSpec and Other Functions
目录 对Gridspec的一些精细的调整 利用SubplotSpec fig.add_grdispec; gs.subgridspec 一个利用Subplotspec的复杂例子 函数链接 matplo ...
- 【算法】01-数据结构概述(注意区分jvm堆与堆/jvm栈与栈)
[算法]01-数据结构概述(注意区分jvm堆与堆/jvm栈与栈) 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有 ...