码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2dx 入口函数分析

时间:2020-11-11 16:08:51      阅读:4      评论:0      收藏:0      [点我收藏+]

标签:扩展   http   跨平台   工作   rgb   重要   关闭   har   其他   

以下是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 入口函数分析

标签:扩展   http   跨平台   工作   rgb   重要   关闭   har   其他   

原文地址:https://www.cnblogs.com/SunShine-gzw/p/13765216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!