zl程序教程

您现在的位置是:首页 >  后端

当前栏目

杨过小龙女玉女心经篇--简单工厂模式

模式 简单 -- 工厂
2023-09-14 09:12:42 时间
Mountain:终南山
Single_arm:杨过
Little_dragon_maiden:小龙女
Jade girl's Heart Sutra:玉女心经
Dust_world:尘世
being  silent and your palm:黯然销魂掌
#include <iostream>
#include <string>
using namespace std;

enum MARTIAL
{
    single_arm,
    little_dragon_maiden
};

class Mountain
{
public:
    int test_int = 3;
    virtual void show() = 0;
};
class Single_arm : public Mountain
{
public:
    Single_arm(int param_test = 0)
    {
        this->test_int = param_test;
    }

private:
    void show();
};

void Single_arm::show()
{
    cout << "being  silent and your palm" << endl;
}

class Little_dragon_maiden : public Mountain
{
private: //并不会限制show()函数
    void show();
};

// void Little_dragon_maiden::show_again()
// {
//     cout << "again_show" << endl;
// }

void Little_dragon_maiden::show()
{
    cout << "Jade girl's Heart Sutra" << endl;
}

class Dust_world
{
public:
    static Single_arm* p_Single_arm;
    static Little_dragon_maiden* p_Little_dragon_maiden;
    static Mountain* character(MARTIAL type);
};
Single_arm* Dust_world::p_Single_arm = NULL;
Little_dragon_maiden* Dust_world:: p_Little_dragon_maiden = NULL;
Mountain* Dust_world::character(MARTIAL type)
{
    if(type == single_arm)
    {
        if(p_Single_arm == NULL)
        {
            p_Single_arm = new Single_arm(6);
        }
        return p_Single_arm;
    }
    if(type == little_dragon_maiden)
    {
        if(p_Little_dragon_maiden == NULL)
        {
            p_Little_dragon_maiden = new Little_dragon_maiden;
        }
        return p_Little_dragon_maiden;
    }
}

int main(void)
{
    Mountain* p_Mounuain = Dust_world::character(MARTIAL::single_arm);
    Mountain* p_Mounuain_2 = Dust_world::character(MARTIAL::little_dragon_maiden);
    cout << "test_int : " << p_Mounuain->test_int << endl;
    cout << "test_int : " << Dust_world::p_Single_arm->test_int << endl;

    p_Mounuain->show();
    p_Mounuain_2->show();
    //可访问
    //虚函数表可见性
    Dust_world::character(MARTIAL::single_arm)->show();
    delete Dust_world::p_Single_arm;
    delete Dust_world::p_Little_dragon_maiden;
    cout << "hello friend !" << endl;
    //不可访问
    // Single_arm* test_p_Single_arm = new Single_arm(0);
    // test_p_Single_arm->show();
    //不可访问
    // Single_arm sigle_arm;
    // sigle_arm.show();
    return 0; 
}

哎呦喂ヾ(✿゚▽゚)ノ~路长馆小,雪轻帘薄,酒热乎,这位爷~您ヾ(✿゚▽゚)ノ~ 里面坐~
本公众号专注分享C++,ffmpeg,opencv等相关音视频知识
webrtc,udp,tcp,rtsp,rtmp,srt/nginx+rtmp等流媒体协议和服务器
同时也会有大厂音视频技术专家不定期直播分享…
国人开发流媒体srs服务器,及yangrtc(国人版的webrtc)协议新动向
偶尔分享下程序员梦呓碎碎念(๑•॒̀ ູ॒•́๑)啦啦啦
目前刚刚开通,接受读者的优质投稿…
鉴于国内音视频圈子小,起步晚,以致分享少,门槛高,特开通分享,一起扇动这阵风吧!
微信扫描下方二维码,关注公众号,赶快进入音视频开发者社区吧!