以下是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 入口函数分析的更多相关文章

  1. 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如何启动内核过程打下基 ...

  2. twemproxy源码分析1——入口函数及启动过程

    最近工作中需要写一个一致性哈希的代理,在网上找到了twemproxy,结合网上资料先学习一下源码. 一.Twemproxy简介 Twemproxy是memcache与redis的代理,由twitter ...

  3. 1.2. chromium源代码分析 - chromiumframe - 入口函数

    ChromiumFrame的入口函数在main.cpp中,打开main.cpp.中包含3个类和_tWinMain函数._tWinMain就是我们要找的入口函数.我做了部分注释: int APIENTR ...

  4. module_init宏解析 linux驱动的入口函数module_init的加载和释放

    linux驱动的入口函数module_init的加载和释放 http://blog.csdn.net/zhandoushi1982/article/details/4927579 void free_ ...

  5. jQuery分析(2) - $工厂函数分析

    前言 从这节进入jQuery的世界,首先从jQuery的入口函数开始了解jQuery()或$是如何运作的,这里我给出了一个最小的例子来分析. 回忆 在进入分析代码前我们回想下jQuery的使用方法有哪 ...

  6. C++的入口函数

    我们最开始学习c++时,就知道要写一个main()函数,并且知道这是整个函数的入口,但是c++不只有main()函数这一个入口. 一.对于不同的程序函数入口是不同的. main()是WINDOWS的控 ...

  7. [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND

    原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...

  8. [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND

    原文:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUA ...

  9. 程序入口函数和glibc及C++全局构造和析构

    分类: CRT Machnasim 2011-06-15 17:45 144人阅读 评论(0) 收藏 举报 c++汇编linuxlist语言编译器 1,程序入口函数和初始化 操作系统在装载可执行文件后 ...

随机推荐

  1. django——django链接mysql数据库

    1.创建项目 django-admin startproject django_mysql 2.创建App python manage.py startapp app1 3.Mysql数据库配置 (1 ...

  2. JAVA验证手机号码是否正确

    PhoneUtils.java package com.common.util; import java.util.regex.Matcher; import java.util.regex.Patt ...

  3. 平衡二叉树(c++实现)续

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist --- 欢迎指正--- 题外话:上一篇关于平衡二叉树文章中,我都没说自己是怎么理解的.别人终 ...

  4. cmake之指定clang(++)编译器为默认编译器

    1.说明 本文演示环境的cmake版本3.18 clang是自己源码安装的,非获取已经编译好的binary 2.代码 2.1 添加下面的代码到CMakeLists.txt中,且放到 project语句 ...

  5. 【LeetCode】280. Wiggle Sort 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序后交换相邻元素 日期 题目地址:https://l ...

  6. 【LeetCode】1024. Video Stitching 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心 日期 题目地址:https://leetcod ...

  7. 【LeetCode】949. Largest Time for Given Digits 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  8. 【剑指Offer】07. 重建二叉树 解题报告(Java & Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 基本方法:线性查找根节点的位置 方法优 ...

  9. 【LeetCode】368. Largest Divisible Subset 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/largest-d ...

  10. 设计模式学习——JAVA动态代理原理分析

    一.JDK动态代理执行过程 上一篇我们讲了JDK动态代理的简单使用,今天我们就来研究一下它的原理. 首先我们回忆下上一篇的代码: public class Main { public static v ...