模板方法模式(大话设计模式)C/C++版本
模板方法模式

C++
#include <iostream>
using namespace std;class TestPaper
{
public:void TestQ1(){cout << "杨过得到,后来给了郭靖,炼成倚天剑,屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维" << endl;cout << "答案: " << Answer1() << endl;}void TestQ2(){cout << "杨过、程英、陆无双铲除了情花,造成[ ]\na.使这种植物不再害人 b.使一种珍稀物种灭绝c.破坏了那个生物圈的生态平衡d.造成该地区沙漠化" << endl;cout << "答案: " << Answer2() << endl;}void TestQ3(){cout << "蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ]\na.阿司匹林b.牛黄解毒片c.氟哌酸d.让他们喝大量的生牛奶e.以上全不对" << endl;cout << "答案: " << Answer3() << endl;}virtual string Answer1(){return "null";}virtual string Answer2(){return "null";}virtual string Answer3(){return "null";}
};class TestPaperA : public TestPaper
{string Answer1(){return "a";}string Answer2(){return "b";}string Answer3(){return "c";}
};class TestPaperB : public TestPaper
{string Answer1(){return "a";}string Answer2(){return "a";}string Answer3(){return "a";}
};int main()
{cout << "同学A答题情况: " << endl;TestPaper *A = new TestPaperA();A->TestQ1();A->TestQ2();A->TestQ3();cout << endl;cout << "同学B答题情况: " << endl;TestPaper *B = new TestPaperB();B->TestQ1();B->TestQ2();B->TestQ3();return 0;
}
C
#include <stdio.h>
#include <string.h>
typedef struct
{char question[256];char answer[256];
} Question;typedef struct
{Question questions[3];char *(*getAnswer)(int questionIndex);
} TestPaperBase;// 定义问题
Question g_questions[3] = {{"杨过得到,后来给了郭靖,炼成倚天剑,屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维", "null"},{"杨过、程英、陆无双铲除了情花,造成[ ]\na.使这种植物不再害人 b.使一种珍稀物种灭绝c.破坏了那个生物圈的生态平衡d.造成该地区沙漠化", "null"},{"蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ]\na.阿司匹林b.牛黄解毒片c.氟哌酸d.让他们喝大量的生牛奶e.以上全不对", "null"}
};char *getAnswerA(int index)
{switch (index){case 0:return "a";case 1:return "b";case 2:return "c";default:return "Invalid question index";}
}char *getAnswerB(int index)
{switch (index){case 0:return "a";case 1:return "a";case 2:return "a";default:return "Invalid question index";}
}void TestQ(TestPaperBase *paper, int qIndex)
{strncpy(paper->questions[qIndex].answer, paper->getAnswer(qIndex), sizeof(paper->questions[qIndex].answer) - 1);printf("%s\n", paper->questions[qIndex].question);printf("答案:%s\n", paper->questions[qIndex].answer);
}int main()
{TestPaperBase TestPaperA;memcpy(TestPaperA.questions, g_questions, sizeof(g_questions));TestPaperA.getAnswer = getAnswerA;printf("同学A答题情况:\n");TestQ(&TestPaperA, 0);TestQ(&TestPaperA, 1);TestQ(&TestPaperA, 2);printf("\n");TestPaperBase TestPaperB;memcpy(TestPaperB.questions, g_questions, sizeof(g_questions));TestPaperB.getAnswer = getAnswerB;printf("同学B答题情况:\n");TestQ(&TestPaperB, 0);TestQ(&TestPaperB, 1);TestQ(&TestPaperB, 2);return 0;
}
总结
设计基类的时候,最大程度上的去复用代码,尽可能的泛化。细节高层次的差别的地方可以virtual,要求子类重写。
相关文章:
模板方法模式(大话设计模式)C/C++版本
模板方法模式 C #include <iostream> using namespace std;class TestPaper { public:void TestQ1(){cout << "杨过得到,后来给了郭靖,炼成倚天剑,屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维&qu…...
数据提取:数据治理过程中的质量保障
一、引言 在数字化时代,数据已经成为企业决策和运营的核心资源。然而,数据的价值并不仅仅在于其数量,更在于其质量。数据治理作为确保数据质量、安全性和一致性的重要手段,对于企业的长期发展至关重要。其中,数据提取…...
第55期|GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...
移植案例与原理 - utils子系统之file文件操作部件
Utils子系统是OpenHarmony的公共基础库,存放OpenHarmony通用的基础组件。这些基础组件可被OpenHarmony各业务子系统及上层应用所使用。公共基础库在不同平台上提供的能力: LiteOS-M内核:KV(key value)存储、文件操作、定时器、Dump系统属性。…...
个股期权有哪些股票?金融新手必须知道!
今天带你了解个股期权有哪些股票?在中国的股票市场中,个股期权是一种衍生品,允许投资者购买或卖出特定股票的期权合约。 个股期权有哪些股票? 个股期权是指在特定时间内,以特定价格买入或卖出特定数量的某只个股的权利…...
平庸的学术工作者
自己进入学术这条路,差不多十年了,回想自己目前的成果,自我评价为平庸。如果将同领域清华的年轻学者打分为 100 分的话,我将自己打分 65。 到目前为止,并不觉得智力因素在管理科学与工程领域的科研中有太大决定作用&a…...
安卓软件自动运行插件的开发源代码介绍!
随着移动互联网的快速发展,安卓操作系统凭借其开放性和灵活性,成为了众多开发者们的首选平台,在安卓应用的开发中,为了实现各种复杂的功能,插件化技术逐渐受到青睐。 其中,自动运行插件作为一种能够实现应…...
小程序餐饮点餐系统,扫码下单点菜,消费端+配送端+收银端+理端
目录 前言: 一、小程序功能有哪些 前端: 管理端: 二、实体店做小程序的好处 方便快捷的点餐和支付体验: 扩大店铺的曝光度和影响力: 优化顾客体验和服务质量: 降低成本和提高效率: 数据…...
说说你这个项目的架构情况吧?
说说你这个项目的架构情况吧? 从整体部署情况上,目前这个项目部署在两台服务器上,每台服务器部署一套应用在里面,如果某个服务挂了也不会影响到我们的整体的服务提供。当然,如果我们的服务器资源宽裕的话,可…...
接口响应时间测试
curl 要使用 curl 测试一个接口的响应时间具体步骤和命令示例: 打开你的终端或命令行工具。 使用 curl 命令并添加 -w(或者 --write-out)参数来输出时间统计信息。 示例命令: curl -o /dev/null -s -w "Time to Connect: %{time_connect}\nTime to Start Transfer: …...
C++ 61 之 函数模版
#include <iostream> #include <string> using namespace std;void swapInt(int &a,int &b){int temp a;a b;b temp; }void swapDou(double& a, double& b){double temp a;a b;b temp; }// T代表通用数据类型,紧接着后面的代码&a…...
甘特图如何画以及具体实例详解
甘特图如何画以及具体实例详解 甘特图是一种常见的项目管理工具又称为横道图、条状图(Bar chart)。是每一位项目经理和PMO必须掌握的项目管理工具。甘特图通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。但是多项目经理和PMO虽然考了各种证…...
Android SDK版本号与API Level 的对应关系
自从Android 1.5系统以来,谷歌习惯于用甜点为每个版本的移动操作系统命名,而且按字母顺序排列,这个传统始于八年多以前,从早期的Android1.5 C(Cupcake)、Android 1.6 D(Donut)到最近…...
AES加解密工具类
文章目录 前言一、AES加解密工具类总结 前言 当涉及到数据的安全性和保密性时,加密是一种关键的技术手段。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,被认为是目前最安全和最常用的加密算法之一。 一、AES…...
Http协议JSON格式
1. 计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 思考:计算机网络…...
【算法与设计】期末总结
文章目录 第一章 概述算法与程序时间复杂性求上界 第二章 递归与分治双递归函数——Ackerman函数分治策略大整数乘法两位两位四位x四位 三位x三位两位x六位 第三章 动态规划矩阵连乘基本要素最优子结构子问题重叠 备忘录 第四章 贪心算法活动安排问题基本要素贪心选择性质最优子…...
odoo报错KeyError: ‘ir.http‘
使用odoo17代码,python3.10.11配好的开发环境,当启动以后,浏览器登录访问的时候,后台报错 ERROR odoo_db odoo.modules.loading: Database odoo_db not initialized, you can force it with -i base File "/opt/odoo/odoo/o…...
每日的影视作品推荐❗❗
每日的影视作品推荐:剧名:《无法抗拒的男友们》主演:王子清、文苡帆 推荐理由:演技出色:王子清和文苡帆的演技非常出色,他们将角色间的情感变化演绎得细腻而真实,让人仿佛身临其境。 情感深刻&a…...
css 文字下划线 text-decoration
背景: 在某些时候需要给文字添加特殊样式。使用 text-decoration: underline; 来为段落文字添加下划线。也有其它文本装饰样式,例如: none:无装饰(去掉装饰)overline:上划线line-through&…...
Java-01-基础篇-04 Java集合-04-HashMap (源码)
目录 一,HashMap 1.1 HashMap 属性分析 1.2 HashMap 构造器 1.3 HashMap 内置的 Node 类 1.4 HashMap 内置的 KeySet 类 1.5 HashMap 内置的 Values 类 1.6 HashMap 内置的 EntrySet 类 1.7 HashMap 内置的 UnsafeHolder 类 1.8 HashMap 相关的迭代器 1.9…...
开源自动驾驶系统终极指南:从入门到精通
开源自动驾驶系统终极指南:从入门到精通 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending/op/openpilo…...
All in Token,百度李彦宏指出:Token经济,阿里,百度,腾讯,字节,移动,电信,联通,华为,开启新的Token战争
当AI作为生产力已经成为确定性命题,我们当下应该如何衡量一家AI企业的价值?是看大模型跑分刷榜的能力,还是用户每天消耗的token数量?5月13日的Create2026大会上,百度创始人李彦宏提出了一个全新标准——DAA,…...
从零构建本地化AI代码助手:架构、微调与工程实践
1. 项目概述:从零构建你自己的Claude代码助手最近在开发者社区里,一个名为“build-your-claude-code-from-scratch”的项目引起了我的注意。这个标题本身就充满了吸引力——它暗示着一种可能性:我们是否能够不依赖任何现成的、闭源的商业API&…...
构建通用Docker工具镜像:从设计到实践的全流程指南
1. 项目概述:一个“反重力”的Docker镜像?看到这个镜像名runzhliu/docker-antigravity,很多人的第一反应可能是好奇和疑惑。在Docker Hub上,以“antigravity”(反重力)命名的镜像并不常见,它不像…...
如何为深信服超融合平台上的应用快速接入大模型能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何为深信服超融合平台上的应用快速接入大模型能力 对于在深信服超融合平台上部署业务应用的企业开发团队而言,集成智…...
PaperDebugger:用代码调试思维提升学术论文可复现性的工具实践
1. 项目概述:一个为学术论文“排雷”的智能调试器如果你和我一样,常年混迹在学术圈或者技术研发一线,肯定对下面这个场景深恶痛绝:好不容易读完一篇几十页的论文,满心欢喜地准备复现其中的算法或实验,结果发…...
从“客户匿名”到“可验证”:技术服务案例的工程化写法
在撰写技术服务案例时,我们经常面临一个挑战:客户要求匿名,但案例又需要让潜在客户相信效果。如何平衡?结合文澜天下科技在AI搜索优化项目中的实践,分享一种“可验证”的案例写法。一、定位具体行业和场景 不写“某教育…...
MCP2221+Blinka+Jupyter:桌面Python直连I2C传感器实时可视化
1. 项目概述:当桌面电脑“学会”与传感器对话作为一名在嵌入式开发和数据可视化领域摸爬滚打了十多年的老手,我见过太多为了读取一个温度传感器的数据,而不得不先折腾Arduino固件、再折腾串口通信、最后还要自己写个上位机软件的复杂流程。整…...
C++中的封装、继承、多态理解
封装(encapsulation):就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程&…...
锂电池安全使用指南:从原理到实践,避免常见风险
1. 项目概述:从“能用”到“用好”的锂电安全课如果你玩过任何需要脱离电源线工作的电子项目,无论是给一个Arduino小车供电,还是驱动一架四轴飞行器,最终都绕不开一个核心问题:电源。从最基础的碱性电池,到…...
