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

微信网站模板免费下载iis里如何装php网站

微信网站模板免费下载,iis里如何装php网站,施工企业资质新标准2022,建设网站合同范本在曾经学习面向对象的概念上,对虚函数和纯虚函数的区别,我们都会止于这样的理解层面:虚函数是用于被子类可继承可重写的函数,而纯虚函数是子类继承后就必须重写的函数。但是在开发工作上,却有很多开发者是没法彻底参透…

在曾经学习面向对象的概念上,对虚函数和纯虚函数的区别,我们都会止于这样的理解层面:虚函数是用于被子类可继承可重写的函数,而纯虚函数是子类继承后就必须重写的函数。但是在开发工作上,却有很多开发者是没法彻底参透到其中的代码设计艺术,于是会把代码写得一塌糊涂。

面向对象其实是个很好的设计理念,如果能够掌握好如何使用它,那么我们就会把开发的事情做得游刃有余。

以下我稍微讲讲它们该如何使用的恰当,才能展现出代码的扩展性和提高代码质量。

举个简单的例子(这个例子可能不是很恰当,但我不想花太多心思去选择合适的例子,暂且就这样吧),我要实现一个打印文件的功能。

功能需求是这样的:

1、同时支持打印不同格式的文件内容,如 PDF、Excel.
2、打印 PDF 分为两种打印方式:PDF 文件 和 打印机打印纸质文件。
3、PDF 可选是否打印彩色内容。

纯虚函数的使用方式

纯虚函数的特点:

  • 基类定义的纯虚函数,是子类继承后必须要实现的函数。
  • 至少存在一个纯虚函数的基类,一定是一个抽象类,不能直接实例化。

实现一个通用的打印类:


// 打印基类抽象
class Printer
{
public:Printer() { }~Printer() {}virtual void Print(std::string filePath) = 0;virtual void Read(std::string filePath) = 0;};// PDF 打印类
class PDFPrinter : public Printer
{
public:explicit PDFPrinter():Printer() {}~PDFPrinter() {}void Print(std::string filePath) override{std::cout << "print a PDF.";}void Read(std::string filePath) override{std::cout << "Read content from a PDF file.";}};// Excel 打印类
class ExcelPrinter : public Printer
{
public:explicit ExcelPrinter():Printer() {}~ExcelPrinter() {}void Print(std::string filePath) override{std::cout << "print a Excel.";}void Read(std::string filePath) override{std::cout << "Read content from a Excel file.";}};// 简单工厂模式
class PrinterFactory
{
public:static bool CreatePrinter(std::string tag){Printer* printer = nullptr;if (tag == "PDF"){printer = new PDFPrinter();}else if(tag == "Excel"){printer = new ExcelPrinter();}if (printer != nullptr){printerVector[tag] = printer;return true;}return false;}static Printer* getPrinter(std::string tag){return printerVector[tag];}private:static std::map<std::string, Printer*> printerVector;
};
std::map<std::string, Printer*> PrinterFactory::printerVector = { };int main()
{// 在外部创建时PrinterFactory::CreatePrinter("PDF");PrinterFactory::CreatePrinter("Excel");// 在外部引用时Printer* pdfPrinter = PrinterFactory::getPrinter("PDF"); pdfPrinter->Print("xxxxfilePath");// 代码的低耦合,可以灵活调整软件需求。//如果需求改为我只想要打印 Excel 功能,只需要改为 getPrinter("Excel"); 就可以了。 }

从上面例子看出,纯虚函数的作用如下:

  • 纯虚函数一般适用在子类都有共同的功能,PDF 和 Excel 打印类都有打印和读取的功能 。但是各自相同功能的实现逻辑不相同。
  • 在外部使用时,统一使用抽象接口来处理这些行为函数,以提高代码变动的灵活性和扩展性。

虚函数的使用方式

虚函数的特点:

  • 基类定义的虚函数,是子类可继承也可重写的行为函数。
  • 不存在纯虚函数的基类,可以被实例化。

在打印功能扩展一些操作:

// PDF 基类,PDF 内容排版
class PDFBase
{
public:PDFBase() { }~PDFBase() {}virtual void SetIsColor(bool isColor = false) {std::cout << "default Color:" << isColor; }virtual void SetPrintType(std::string type) {std::cout << "A standard pdf format."; }
};// PDFBase 被 PDFPrinter 继承
class PDFPrinter : public Printer, public PDFBase
{
public:explicit PDFPrinter():Printer() {}~PDFPrinter() {}void Print(std::string filePath) override{std::cout << "print a PDF.";}void Read(std::string filePath) override{std::cout << "Read content from a PDF file.";}void SetPrintType(std::string type) { std::cout << "print type:"<< type; }};int main()
{// 在外部创建时PrinterFactory::CreatePrinter("PDF");// 在外部引用时Printer* pdfPrinter = PrinterFactory::getPrinter("PDF");PDFBase* pdfBase = dynamic_cast<PDFBase*>(pdfPrinter);pdfBase->SetPrintType("打印机");// 但是如果将 getPrinter("PDF") 改为Excel 类型,则转换 pdfBase 就会为 NUll。// 所以在转换类型时,要养成先判断实例是否为空的习惯。// 如果仅仅为了展示 PDF 内容样式,如编辑 PDF 内容样式后进行存储参数值,//但是不进行打印操作,则可以直接实例化 PDFBase。PDFBase* pdfBaseVar = new PDFBase();pdfBaseVar->SetIsColor(true);SaveConfig(pdfBaseVar); // 保存在本地里,以便下次打印操作时需要;}

从上面例子看出,虚函数的作用如下:

  • 虚函数一般适用在子类只继承不需要重写的函数,如 SetIsColor。
  • 虚函数也一般适用于某些子类有扩展的特性,如 pdf 有虚拟打印和打印机打印,而 Excel 却只支持虚拟打印出文件。
  • 在外部使用时,对于局部区域的专注使用较为便利。如 PDF 打印时弹出打印内容排版选项,只使用 pdfBase 来专门处理内容的,而避免了 PDFPrinter 错误调用 read 等操作的影响。

睡前随便写写,写得可能有点乱,但应该不难理解,将就着看吧。


文章转载自:

http://icvNaWYC.xwqxz.cn
http://R9tYRzjE.xwqxz.cn
http://EU5kJeLw.xwqxz.cn
http://6hcjgs8k.xwqxz.cn
http://0sW6bfio.xwqxz.cn
http://E12SgVWZ.xwqxz.cn
http://nEGBNvVp.xwqxz.cn
http://7oaAICK5.xwqxz.cn
http://zXhnq32U.xwqxz.cn
http://zmI5Su8T.xwqxz.cn
http://1wIpQfdL.xwqxz.cn
http://HF1VTt8R.xwqxz.cn
http://QAsoYzhV.xwqxz.cn
http://evpG8tPo.xwqxz.cn
http://hPP3vrWn.xwqxz.cn
http://IrfNVnVu.xwqxz.cn
http://xozuq84u.xwqxz.cn
http://2aRsOjl0.xwqxz.cn
http://2U9Xp7j2.xwqxz.cn
http://MX7wovqh.xwqxz.cn
http://HDu6x8m6.xwqxz.cn
http://D6QFj3o6.xwqxz.cn
http://Ifob9NYe.xwqxz.cn
http://eB2AHa7x.xwqxz.cn
http://oByJkEsN.xwqxz.cn
http://ImhUntKo.xwqxz.cn
http://9n8J0xDa.xwqxz.cn
http://R5qJna74.xwqxz.cn
http://CvPVyJtU.xwqxz.cn
http://cO5ehQmj.xwqxz.cn
http://www.dtcms.com/wzjs/689986.html

相关文章:

  • 免费网站宣传网站建设公司推荐时代创信
  • 列出网站目录网页设计作业html代码大全
  • 怎么查网站注册信息wordpress修改版权信息
  • 河北住房和城乡建设厅网站首网页策划案的范文
  • 做彩票网站服务器网站 繁体 js
  • 快速网站推广优化广东省自然资源厅事务中心
  • 南昌住房和城乡建设部网站电话上海比较好的外包公司
  • 腾讯云网站建设流程嘉兴网站公司
  • 网站添加地图自己做的娱乐平台网站
  • 四川鸿业建设集团网站上海待遇好的十大国企排名
  • 有没有学做蛋糕的网站和视频购物网站开发报告
  • 海口网站建设方案报价网站开发人员绩效考核
  • 常德网站建设产品写论文的好网站
  • 个人注册域名可以做网站么wordpress 标签模板下载
  • 常州建站价格文化馆门户网站建设的作用及意义
  • 怎么经营团购网站电商网站改版
  • 58同城网站建设目的个人养老缴费明细查询
  • asp和php网站的区别小语言网站建设
  • 绝味鸭脖网站建设规划书宿州商务网站建设
  • 网站备案网站名称网站开发专业就业前景分析
  • 宁波住房和建设局网站怎么做蛋糕
  • 微网站难做么微信怎么推广
  • 文化传媒公司 网站备案跨境电商无货源模式怎么做
  • 郑州seo网站推广桂林市建设局网站
  • 怎样成立网站dw软件怎么用怎么做网页
  • 哪里可以做拍卖网站最新新闻热点国家大事
  • 网站备案用的幕布可以淘宝做吗网站显示系统建设中
  • 阿里云对象存储做静态网站网站建设 名词解释
  • 视频网站开发与制作wordpress 改成 中文
  • 门户网站建设厂商名录无广告自助建站