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

十堰专业网站设计制作商标交易

十堰专业网站设计制作,商标交易,网站建设与制作dw8教程,电商网站的二级怎么做1.前言 假设我们需要编写一个程序#xff0c;它能够传送信息到若干不同的公司去。信息要不编译称密码#xff0c;要不就是未加工的文字。如果编译器间我们有足够的信息来决定哪一个信息传至哪一家公司#xff0c;就可以采用基于template的解法#xff1a; class Company{…1.前言 假设我们需要编写一个程序它能够传送信息到若干不同的公司去。信息要不编译称密码要不就是未加工的文字。如果编译器间我们有足够的信息来决定哪一个信息传至哪一家公司就可以采用基于template的解法 class Company{public:...void sendClearText(const std::string msg);void sendEncrypted(const std::string msg);...}; class CompanyB{public:...void sendCleartext(const std::string msg);void sendEncrypted(const std::string msg);... }; ...//针对其它公司设计的classes class MsgInfo{....//这个class用来保存信息以备将来产生信息 };templatetypename Company class MsdSender{class MsgSender{public:...void sendClear(const MsgInfo info){std::string msg;Company c; c.sendCleartext(msg);}void sendSecret(const MsgInfo info)//类似sendClear{....}} }; 2.实例分析 这个做法能够完成任务但假设我们有时候想要在每次送出信息时log某些信息。derived class可轻易加上这样的功能 templatetypename Company class LoggingMsgSender:public MsgSenderCompany {public:...//相关构造函数析构函数等void sendClearMsg(const MsgInfo info){将“传送前”的信息写至logsendClear(info);//调写base class函数这段代码无法通过编译将“传送后”的信息写至log }... }; 注意这里derived class的信息传送函数有一个不同的名称sendClearMsg,与其base class内的名称sendClear不同。能避免遮掩“继承而得”的名称也避免重新定义一个继承而得得non-virtual函数。然而不幸得时上述代码无法通过编译。编译器会抱怨sendClear不存在。我们能看到sendClear()确实在base class内编译器却检测不到它们为什么 问题在于当编译器遇到class template LoggingMsgSender定义式时并不知道它要继承什么样的class。当然它继承的是MsgSenderCompany,但其中的Company是个template参数不到loggingMsgSender被具现化无法知道它是什么。而如果不知道Company是什么就无法知道class MsgSenderCompany看起来是什么-更明确地说是没办法知道它是否有个sendClear函数。 为了让问题更具体化假设我们有个class CompanyZ坚持使用加密通讯 class CompanyZ{public:...void sendEncrypted(const std::string msg);... }; 一般性的MsgSender template对CompanyZ并不合适因为那个template提供了一个sendClear函数其中针对其类型参数Company调用了sendCleartext函数而这对CompanyZ对象并不合理要矫正这个问题我们可以针对CompanyZ产生一个MsgSender特化版 template class MsgSenderCompany//一个全特化的MsghSender,//它和一般template相同差别在于它删除了sendClear {public:...void sendSecret(const MsgInfo info){...}}; 注意class定义式最前头的“template”语法象征这即不是template,也不是标准的class而是个特化版的MsgSender template,在template实参是CompanyZ时被使用。而这个所谓的模板全特化total template specialization:template MsgSender针对类型CompanyZ特化了而且其特性也是全面性的也就是说一旦类型参数被定义为CompanyZ再没有其它template参数可供变化。 现在MsgSender针对CompanyZ进行了全特化让我们再次考虑derived class 中的LoggingMsgSender: templateMsgSender: templatetypename Company class LoggingMsgSender:public MsgSenderCompany {public:...void sendClearMsg(const MsgInfo info){//将“传送前”的信号写至log;sendClear(info);//如果·CompanyCompanyZ,这个函数将不存在//将“传送后”的信息写到log}.... }; 正如注释所言当base class被指定为MsgSenderCompany时这段代码不合法因为class并未提供sendClear函数那就是为什么C拒绝调用的原因它知道base class template有可能被特化而那个版本可能不提供和一般性template相同的接口。因此它会拒绝在template base classes(模板化基类本例的MsgSenderCompany)内寻找继承而来的名称本例的SendClear。 为了重头来过我们必须有某种办法令C“不进入templatized base classes观察“的行为失效。有三个办法 第一是在base class函数调用动作之前加上”-this“: templatetypename Company class LoggingMsgSender:public MsgSenderCompany {public:...void sendClearMsg(const MsgInfo info){//将”传送前“的休息写至Log;this-sendClear(info);//成立假设sendClear被继承//将传递后的信息写至log} }; 第二是使用using声明式。条款33描述了using 声明式如何将”被掩盖的base class名称带入一个derived class作用域内“我们可以写下sendClearMsg: templatetypename Company class LoggingMsgSender:public MsgSenderCompany {public:using MsgSenderCompany::sendClear;//告诉编译器请他假设sendClear位于base class内...void sendClearMsg(const MsgInfo info){...sendClear(info);//ok,假设sendClear将被继承...} }; 虽然using声明式在这里或在条款33都可有效运作但两处解决问题的本质其实不相同。这里的情况并不是base class名称被derived class名称遮掩而是编译器不进入base class作用域查找于是我们通过Using告诉它。 第三个方法是指出被调用的函数位于base class内 templatetypename Company class LoggingMsgSender:public MsgSenderCompany {public:...void sendClearMsg(const MsgInfo info){...MsgSenderCompany::sendClear(info);//ok,假设sendClear将被继承}....}; 但这不是一种很满意的方法因为如果被调用的是virtual函数上述的明确资格修斯explicit qualification会关闭”virtual绑定行为“。
http://www.zqtcl.cn/news/748305/

相关文章:

  • 昆明网站建设公司哪家好预约网站模板
  • 自己怎么申请网站空间浙江省建设科技推广中心网站
  • 网站后台管理系统怎么添加框wordpress上传之后
  • 网站编辑属于什么行业义乌做网站哪家好
  • 沂水网站开发移动知识库管理系统
  • 成都有哪些网站建设的公司河南网站建设优化推广
  • 小说投稿赚钱的网站网站后台管理系统多少钱
  • 中国建设银行国际互联网网站网站是用什么做的
  • 做建设网站的活的兼职网络推广专员的岗位职责是
  • 韩国 网站设计保定网站开发公司
  • 发外链的网站都要企业注册网站建设的基本概念
  • 网站管理员有哪些权限中文域名网站好不好优化
  • wordpress主题 资源站关闭wordpress自动更新
  • 网站排名怎么上去创建全国文明城市我们应该怎么做
  • 网站 ftp自助建站信息网
  • 做珠宝的网站wordpress获取相关文章
  • 网站开发视频 百度云视频资源的网站怎么做
  • 写出网站建设的基本流程鹤山市城乡住房建设部网站
  • 万网域名注册后如何做网站教学网络传奇游戏
  • 岳阳网站建设方案免费网站模板建设
  • 郑州响应式网站制作如何做公众号微信
  • 专业公司网站建设精准引流推广团队
  • 蔡甸建设局网站怎么用云校建设学校网站
  • 建立网站需要哪些东西软件开发流程包括
  • 网站的pdf目录怎么做的网站编写
  • 南宫企业做网站wordpress图片显示距离
  • 青岛红岛做网站百度怎么打广告
  • 凡科建站怎么建网站网络搭建是什么工作
  • wordpress支持国内视频的编辑器网站优化排名软件网站
  • 建设摩托官方网站南京做网站群的公司