C++简单工厂模式

核心思想:用一个工厂类根据不同的输入条件new出不同的派生类指针,然后由多态调用不同派生类中virtual函数,得到不同的结果

所有的判断处理在工厂类中完成,通过CreateFactory函数,根据不同的类型,new出派生类指针,返回基类指针。

代码如下:

 1 class CFactory
 2 {
 3 public:
 4     CFactory(void);
 5     ~CFactory(void);
 6 
 7 public:
 8     static IOperator* CreateFactory(char cStr);
 9 };
10 
11 IOperator* CFactory::CreateFactory(char cStr)
12 {
13     IOperator *pStr = NULL;
14     switch(cStr)
15     {
16     case '+':
17         {
18             pStr = new CAddOperator();
19         }
20         break;
21     case '-':
22         {
23             pStr = new CSubtract();
24         }
25         break;
26     default:
27         break;
28     }
29 
30     return pStr;
31 }
32 
33 class IOperator
34 {
35 public:
36     IOperator(void);
37     virtual ~IOperator(void);
38 
39 public:
40     virtual int Result() = 0;
41 
42 public:
43     int m_nA;
44     int m_nB;
45 };
46 
47 class CAddOperator : public IOperator
48 {
49 public:
50     CAddOperator(void);
51     ~CAddOperator(void);
52 
53 public:
54     virtual int Result();
55 };
56 
57 class CSubtract : public IOperator
58 {
59 public:
60     CSubtract(void);
61     ~CSubtract(void);
62 
63 public:
64     virtual int Result();
65 };
66 
外部调用:
67 IOperator *pTemp = CFactory::CreateFactory('+'); 68 if (NULL != pTemp) 69 { 70 pTemp->m_nA = 4; 71 pTemp->m_nB = 3; 72 73 int i = pTemp->Result(); 74 }

 


 

转载于:https://www.cnblogs.com/fenglangxiaotian/p/5670484.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Saltstack的pillar组件(6)

pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板、state、API等。在pillar中定义的数据与不同业务特性的minion相关联,这样不同的minion只能看到自己匹配的数据…

redis投票计数

<?php /*** * 缓存利用测试&#xff0c;这里我们获取传过来的投票数据&#xff0c;每次加1&#xff0c;如果增加到了设定值&#xff0c;才将投票* 次数写回mysql&#xff0c;这大大减轻了与mysql链接的开销&#xff0c;redis的使用由此可见一斑* var unknown_type* 来自&am…

在linux系统中安装VSCode(Visual Studio Code)

1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不需要make) 访问Visual Studio Code官网 https://code.visualstudio.com/docs?dvlinux64 我是64位的: wget https://az764295.vo.msecnd.net/stable/7ba55c5860b152d999dda59393ca3ebeb1b5c85f/code-stable-code…

学习笔记(52):Python实战编程-Radiobutton

立即学习:https://edu.csdn.net/course/play/19711/343115?utm_sourceblogtoedu 单选钮&#xff1a;Radiobutton 1&#xff09;相对于大部分组件而言&#xff0c;最大的区别在于单选钮绑定事件是直接通过构建单选钮时方法中的command参数来进行事件的绑定&#xff0c;而其他的…

Linux文本查看命令之touch

touch可以用来创建文件或者修改文件的时间戳如果touch的文件不存在&#xff0c;就创建改文件touch命令可以修改文件的Access time和 Modify time-a 可以仅修改Access time注意&#xff1a;由于Access time的改变&#xff0c;Change time也改变了&#xff0c;但是如果cat该文件&…

dedecms手机站要同步pc站的图片

首先在dede目录下面找到 /include/extend.func.php 文件 //添加自定义函数 function replaceurl($newurl){ $newurlstr_replace(src"/1304/,src"http://www.xxx.com/1304/,$newurl); return $newurl;} 函数调用&#xff1a; functionreplaceurl(me) 例如&#xff1…

使用腾讯开发平台获取QQ用户数据资料

<今天是七夕&#xff1a;祝大家七夕嗨皮&#xff0c;前可么么哒&#xff0c;后可啪啪啪> Tips&#xff1a;本篇博客将教你如何使用腾讯开发平台获取QQ用户资料 ------------------------------------------------------------------------------------------------------…

C++的命名规范

1、 变量名前缀 i_ 类内数据成员&#xff08;对象级成员&#xff09; instance scope c_ 类内静态数据成员&#xff08;类级成员&#xff09; class scope g_ 全局变量 global scope f_ 文件作用域变量&#xff08;静态变量&…

LINUX REDHAT第十单元文档

1.系统日志默认分类#### /var/log/messages##系统服务及日志&#xff0c;包括服务的信息&#xff0c;报错等等 /var/log/secure##系统认证信息日志 /var/log/maillog##系统邮件服务信息 /var/log/cron##系统定时任务信息 /var/log/boot.log##系统启动信息 2.日志管理服务rsyslo…

学习笔记(53):Python实战编程-Checkbutton

立即学习:https://edu.csdn.net/course/play/19711/343116?utm_sourceblogtoedu 复选框Checkbutton:与单选框是相对的&#xff0c;一些用法都是类似的&#xff0c;见单选框 注&#xff1a;在设置复选框的title和index时&#xff0c;设置为选中时onvalue 1,未选中offvalue 0 …

svn merge 回滚

聊一聊 svn merge 命令。 svn 是啥就不用介绍了吧&#xff0c;谁用谁知道。有了 svn&#xff0c;开发者只要把代码提交上去&#xff0c;无论山崩地裂、电脑进水、硬盘格式化&#xff0c;哪怕换了一台电脑&#xff0c;都能随时把代码找回来。不过从自己工作中看到的现象来说&…

使用视觉信息,为什么能把移动机器人的空间位置信息记录下来

1、首先由相机的世界坐标系&#xff0c;物体的世界坐标-》相机坐标-》到投影面坐标-》到像素坐标&#xff1b; 最终一个世界中物体的三维点被记录在相机的一个转化的坐标系中&#xff1b;当同时拿到很多的物体坐标时候&#xff0c;此时相机中就拥有了该 整个观察到物体的坐标…

大三实验室 经验总结

1.高电压采样时&#xff0c;需要将多个电阻串联起来而不能使用一个等效的大电阻&#xff0c;因为同样封装下&#xff0c;一个电阻阻值太大能承受的电流就会比较小 PI*I*R。 2.单片机&#xff0c;DSP,FPGA的纯输出功能IO口&#xff0c;都应该加上74HC04非门作为硬件防火墙&#…

Spring4 MVC文件下载实例

这篇文章将向您展示如何使用Spring MVC4执行文件下载&#xff0c;我们将看到应用程序从文件系统内部以及外部文件下载文件。本教程的主要亮点&#xff1a; 下载文件是相当简单的&#xff0c;涉及以下步骤。 创建一个InputStream到文件用于下载。查找MIME类型下载文件的内容。–…

学习笔记(54):Python实战编程-Scale

立即学习:https://edu.csdn.net/course/play/19711/343117?utm_sourceblogtoedu 1.滑块组件Scale: 用于定义一定范围的区间&#xff0c;如音量大小的调整就是滑块组件&#xff0c;这里是以滑动滑块来改变标签文字的大小为例进行说明的 2.知识点&#xff1a; 1&#xff09;滑…

不可不知的:iOS开发的22个诡异技巧

结合自身的实践开发经验总结出了22个iOS开发的小技巧&#xff0c;以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题&#xff0c;光读着便已忍俊不禁。 1. TableView不显示没内容的Cell怎么办&#xff1f; 类似于图1&#xff0c;我不想让下面的那些空显示。很简单&#…

linux删除之前的文件日志

linux下每天都在产生LOG日志文件&#xff0c;如果不定期删除&#xff0c;迟早挤爆硬盘&#xff0c;如果手动删除&#xff0c;几次可以&#xff0c;不是长久之计。这些事交给Linux系统就可以解决。 试验环境&#xff1a; 系统&#xff1a;CentOS 6.5 x64 测试路径、测试文件名、…

线程操作范例

实例要求&#xff1a; 设计一个线程操作类&#xff0c;要求可以产生三个线程对象&#xff0c;并可以分别设置三个线程的休眠时间。如下所示&#xff1a; 问怎么设计&#xff1f; 分析 从之前学习知道&#xff0c;线程的实现有两种方式&#xff0c;一种是继承Thread类&#xff0…

学习笔记(55):Python实战编程-Scrollbar

立即学习:https://edu.csdn.net/course/play/19711/343118?utm_sourceblogtoedu 1.滚动条ScrollBar&#xff1a; 当列表内容项的内容过多时&#xff0c;就需要使用到这个滚动条来进行拖动显示更多的其他选项&#xff1b;一般滚动条是和listbox配对使用的 2.注意事项&#xff…