当前位置: 首页 > news >正文

网站左侧固定广告代码中山企业网站建设公司

网站左侧固定广告代码,中山企业网站建设公司,0元可以注册公司吗,低价网站建设制作设计公司软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性#xff1a;封装、继承、多态#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程#xff0c;需要大量实践经验的积累。最近看设计模式的书#xff0… 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性封装、继承、多态真正领悟设计模式的精髓是可能一个漫长的过程需要大量实践经验的积累。最近看设计模式的书对于每个模式用C写了个小例子加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》DP两本书。本文介绍单例模式的实现。 单例的一般实现比较简单下面是代码和UML图。由于构造函数是私有的因此无法通过构造函数实例化唯一的方法就是通过调用静态函数GetInstance。 UML图 代码 [cpp] view plaincopyprint? //Singleton.h   class Singleton     {   public:       static Singleton* GetInstance();   private:       Singleton() {}       static Singleton *singleton;   };   //Singleton.cpp   Singleton* Singleton::singleton  NULL;   Singleton* Singleton::GetInstance()   {       if(singleton  NULL)           singleton  new Singleton();       return singleton;   }   这里只有一个类如何实现Singleton类的子类呢也就说Singleton有很多子类在一种应用中只选择其中的一个。最容易就是在GetInstance函数中做判断比如可以传递一个字符串根据字符串的内容创建相应的子类实例。这也是DP书上的一种解法书上给的代码不全。这里重新实现了一下发现不是想象中的那么简单最后实现的版本看上去很怪异。在VS2008下测试通过。 [cpp] view plaincopyprint? //Singleton.h   #pragma once   #include iostream   using namespace std;      class Singleton     {   public:       static Singleton* GetInstance(const char* name);       virtual void Show() {}   protected: //必须为保护如果是私有属性子类无法访问父类的构造函数       Singleton() {}   private:       static Singleton *singleton; //唯一实例的指针   };      //Singleton.cpp   #include Singleton.h   #include SingletonA.h   #include SingletonB.h   Singleton* Singleton::singleton  NULL;   Singleton* Singleton::GetInstance(const char* name)   {       if(singleton  NULL)       {           if(strcmp(name, SingletonA)  0)               singleton  new SingletonA();           else if(strcmp(name,SingletonB)  0)               singleton  new SingletonB();           else                singleton  new Singleton();       }       return singleton;   }   [cpp] view plaincopyprint? //SingletonA.h   #pragma once   #include Singleton.h   class SingletonA: public Singleton   {       friend class Singleton; //必须为友元类否则父类无法访问子类的构造函数   public:       void Show() { coutSingletonAendl; }   private:   //为保护属性这样外界无法通过构造函数进行实例化       SingletonA() {}    };   //SingletonB.h   #pragma once   #include Singleton.h   class SingletonB: public Singleton   {       friend class Singleton; //必须为友元类否则父类无法访问子类的构造函数   public:       void Show(){ coutSingletonBendl; }   private:  //为保护属性这样外界无法通过构造函数进行实例化       SingletonB() {}   };   [cpp] view plaincopyprint? #include Singleton.h   int main()   {       Singleton *st  Singleton::GetInstance(SingletonA);       st-Show();       return 0;   }   上面代码有一个地方很诡异父类为子类的友元如果不是友元函数GetInstance会报错意思就是无法调用SingletonA和SIngletonB的构造函数。父类中调用子类的构造函数我还是第一次碰到。当然了把SingletonA和SIngletonB的属性设为publicGetInstance函数就不会报错了但是这样外界就可以定义这些类的对象违反了单例模式。        看似奇怪其实也容易解释。在父类中构建子类的对象相当于是外界调用子类的构造函数因此当子类构造函数的属性为私有或保护时父类无法访问。为共有时外界就可以访问子类的构造函数了此时父类当然也能访问了。只不过为了保证单例模式所以子类的构造函数不能为共有但是又希望在父类中构造子类的对象即需要调用子类的构造函数这里没有办法才出此下策将父类声明为子类的友元类。 本人享有博客文章的版权转载请标明出处 http://blog.csdn.net/wuzhekai1985
http://icebutterfly214.com/news/32088/

相关文章:

  • echarts 树形结构图实例
  • 2025年11月德语学习课程推荐:德企定制化培训,高性价比职场首选
  • 2025年11月深圳近视手术医生榜单:五强对比与权威数据解读
  • 吹风机激光测距感应温度调节方案
  • P4784 [BalticOI 2016] 城市 (Day2) 小结
  • 完整教程:在 Claude Code 中设置 MCP 服务器(技术总结)
  • SI502、SI502B——NFC前端芯片
  • 1-2-2-异常体系
  • 1-5-1-设计模式与OOP
  • 1-3-5-AQS详解
  • 【JMeter】图形化方式使用 - 谷粒
  • 102302142罗伟钊第二次作业
  • 三场比赛(e)
  • Docker部署Tomcat9.0
  • 2025年安徽猪肉批发厂家综合实力排行榜TOP5
  • 2025年11月智能学习机品牌推荐:十强榜单对比与选购全攻略
  • SRS流媒体服务器,支持rtmp转rtc,docker部署
  • 当下成都家装木饰面板工厂推荐榜单
  • 2025年靠谱的数字程控交换机厂家选购指南与推荐
  • 2025年口碑好的民宿太空舱厂家最新TOP实力排行
  • 2025年评价高的热镀锌止水钢板厂家最新实力排行
  • 豌豆住宅IP——高稳定、可控来源、城市级精准定位 - Smart
  • 2025年比较好的真空钎焊炉厂家推荐及采购参考
  • 2025年知名的印刷PET片热门厂家推荐榜单
  • 使用 Java、Spring Boot 和 Spring AI 开发符合 A2A 标准的 AI 智能体
  • 2025年11月北京离婚律师排名榜:真实口碑与对比评价精选
  • 安徽合肥可靠的异味治理平台选择指南 2025
  • 2025年口碑好的pe贴体膜厂家推荐及采购指南
  • 2025 年 11 月传感器厂家推荐排行榜,压力传感器,温度传感器,位移传感器,光电传感器公司推荐,精准监测与稳定性能深度解析
  • 罗克韦尔PLC靠CCLKIE转EtherNet/IP网关,实时驭动三菱FX5U——输油泵站通讯范本