版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八名字空间和异第八名字空间和异BeijingUniversityofPosts&BeijingUniversityofPosts&BeijingBeijingUniversityofPosts&8.2名字空8.2名字空成员可以在名字空间的定义里声明,而后再去定BeijingUniversityofPosts&理想情况下,一个名理想情况下,一个名字空间应BeijingUniversityofPosts&示示namespacename{声明和定}doubleprim(boolget){/*…*/}doubleterm(boolget){/*…*/}doubleexpr(boolget){/*…*/}voidErrorParser中无logicalvoidParser::prim(int);Parser{doubleexpr(bool);doubleprim(bool);}//实现与界面分doubleParser::expr(boolget){/*…*/}doubleParser::prim(boolget){/*doubleParser::term(boolget){/* BeijingUniversityofPosts&8.2.1带限定词的名8.2.1带限定词的名BeijingUniversityofPosts&带限定词的名字示namespace//定义一个新带限定词的名字示namespace//定义一个新的enumToken_value{NAME,NUMBER,END,MUL=‘*’};Token_valuecurr_tok;stringstring_value;Token_valueget_token(){/*…{}doublefor(;;)switch(Lexer::curr_tok){//caseLexer::NAME:left*=prim(true);//}/*…*///BeijingUniversityofPosts&8.2.2使用声8.2.2使用声可以通过使用声明语句来避免反复书写名字空间定doubleParser::prim(bool{caseLexer::NUMBER://}}doubleParser::prim(bool{usingLexer::curr_tok;get_token();//…BeijingUniversityofPosts&也可以把有关的使用说明也可以把有关的使用说明放在Parser名字空间的doubleParser::term(bool{doubleleft=prim(get);{case义Parser{doubleprim(bool);doubleterm(bool);left*=prim(true);caseif(doubled={left/=prim(true);break;}returnerror(“dividedby/*……*/usingLexer::curr_tok;usingError::error;}BeijingUniversityofPosts&8.2.3使用指一个使用指令能把来自一个名字空间的所有8.2.3使用指一个使用指令能把来自一个名字空间的所有Parser{doubleprim(bool);doubleterm(bool);doubleusingnamespaceLexer;usingnamespaceError;}BeijingUniversityofPosts&8.2.4多重界//namespaceParser{doubleprim(bool);doubleterm(bool);doubleexpr(bool);8.2.4多重界//namespaceParser{doubleprim(bool);doubleterm(bool);doubleexpr(bool);usingnamespaceLexer;usingnamespaceError;}double}BeijingUniversityofPosts&界面设计的各种界面设计的各种选BeijingUniversityofPosts&界面设计的两种选//编程界面设计的两种选//编程界面不Parser_interface{double//double//}Parser_interface{usingexpr(boolget){return}现在所有的依赖性都已最小当然,对于我们所面对的大部分题而言,这种解决方案太过分看上去,用户界面还是很容易受编程界面的伤害,原本希望能将相互隔BeijingUniversityofPosts&8.2.5避免名字冲8.2.5避免名字冲BeijingUniversityofPosts&避免名字冲突示charf(char);intf(int);避免名字冲突示charf(char);intf(int);/*…*/解决方法namespacecharf(char);intf(int);classString{/*…*/};}namespacecharf(char);doublef(double);classString{/*…*/};}使用时My::f(char),usingMy::f;usingYou::String;3usingnamespaceMy;或者usingnamespacecharf(char);classString{/*…*/BeijingUniversityofPosts&无名名字空无名名字空BeijingUniversityofPosts&无名名字空间示namespaceMine{无名名字空间示namespaceMine{intvoiff(){/*…*/}intg(){/*…*/}}相当于$$${inta;voiff(){/*…*/}intg(){/*…*/}}usingnamespace//其中,$$$是在这个名字空//定义所在的作用域里具有唯//性的名字,在不同的编译单//里的无名名字空间也互不相intvoiff(){/*…*/}intg(){/*…*/}}//保证名称的私有性,避免冲BeijingUniversityofPosts&8.2.6名字查一个取T类型参数的函数常常与8.2.6名字查一个取T类型参数的函数常常与T类型本身定namespaceChrono{booloperator==(constDate&,conststd::string&);format(const}voidf(Chrono::Dated,inti){std::strings=format(d);std::stringt=format(i);//Error:找不到使用int输//参数的format()版}BeijingUniversityofPosts&名字空间示名字空间示voidf(Chrono::Dated,std::string{if(d==s){//}elseif(d==“August4,1914”)//}}//此函数最终会调用Chrono名字空间里的BeijingUniversityofPosts&8.2.7名字空间别8.2.7名字空间别namespaceA)可能会出现冲突,但是如果BeijingUniversityofPosts&名字空间别namespaceATT=名字空间别namespaceATT=American_Telephone_and_Telegraph;ATT::Strings3=“Grieg”;ATT::Strings4=namespaceLib=Lib::setLib::Strings5=//将来Foundation库的版本更新了,只需要修改别//Lib的初始化语句并重新编译即可,极大的简化了//级工//注意:程序中过多的使用别名也会引起混BeijingUniversityofPosts&8.2.8名字空间组8.2.8名字空间组有时候我们需要从现存的界面出发组合出新的界His_string{classStringoperator+(constString&,constString&);Stringoperator+(constString&,constchar*);voidfill(char);}namespacetemplate<classT>class}namespaceusingnamespaceHis_string;usingnamespaceHer_vector;BeijingUniversityofPosts&名字空间组合示voidf()名字空间组合示voidf()My_lib::Strings=//系统能够查到//}时,才需要知道一个实体真所在的名字空voidMy_lib::fill(char}//voidHis_string::fill(char}//voidMy_lib::my_fct(String&{//okString是//usingnamespaceMy_lib;voidg(Vector<String>&vs){}//Vector以及String都是//中可以查到BeijingUniversityofPosts&选His_string{选His_string{classStringoperator+(constString&,constString&);Stringoperator+(constString&,constchar*);}BeijingUniversityofPosts&改进方通过using语句,使得从名字空间里选择一改进方通过using语句,使得从名字空间里选择一My_string{usingusingHis_string::operator+;//一条using语句就可以将operator+的所有重载都包含进BeijingUniversityofPosts&组合和选将组组合和选将组合(通过using指令)和选择(通过using声明)结例子所需要His_lib{classtemplate<classT>class}Her_lib{template<classT>classnamespaceusingnamespaceHis_lib;usingnamespaceHer_lib;usingHis_lib::String;//以偏向His_lib的方式解//潜在的冲using//同template<classT>class}BeijingUniversityofPosts&组合与选组合与选BeijingUniversityofPosts&8.2.9名字空间和老代8.2.9名字空间和老代BeijingUniversityofPosts&名字空间和//cstdio,给那名字空间和//cstdio,给那些不希望一大namespacestd{intprintf(constchar*}intmain(){printf("Hello,}namespacestd{intprintf(constchar*}usingnamespace#include<cstdio>usingBeijingUniversityofPosts&名字空间和重名字空间和重//老的namespaceB{void}namespaceA{void}//新的void#include“A.h”#include“B.h”usingnamespaceA;usingnamespaceB;voidg(){f(‘a’);//调用B.h中的}voidg(){f(‘a’);//调用B.h中的}BeijingUniversityofPosts&名字空间是开放名字空间是开放A{intf();//A中现有}void{//}A{intg();//A中现有f()和}//Error:A中没有namespaceA{voidff()}BeijingUniversityofPosts&8.3异8.3异一方报告那些无法在局部解决的错BeijingUniversityofPosts&BeijingUniversityofPosts&异常处理示voidg(int{try异常处理示voidg(int{trycharc=}x){cerr<<“oops\n”;cerr<<x.i<<}Range_error{inti;Range_error(intii)charto_char(int{throwRange_error(i);return}BeijingUniversityofPosts&异常的处理过异常的处理过异常的地方跳转到try后面的第一个异常处理BeijingUniversityofPosts&BeijingUniversityofPosts&异常的辨识示catch(Syntax_error异常的辨识示catch(Syntax_error}catc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年起重机械操作证考试模拟试题及答案
- 2025年物流货物托盘试题及答案
- 2025年动物形性格测试题及答案
- 2025年中职虚拟机考试题及答案
- 2025-2030冷链物流行业市场发展分析及前景趋势与供应链优化研究报告
- 2026年中国贴巴木项目经营分析报告
- 开会啦学霸课堂笔记数学一年级下册培优北师大版教案(2025-2026学年)
- 霍拉舞曲教案(2025-2026学年)
- 2026年中国棉花种子项目经营分析报告
- 部编统编二下语文看图写话专项练习公开课教案反思试卷(2025-2026学年)
- 妊娠合并抗磷脂综合征护理查房
- 2025年浙江省公职招录考试(省情时政)历年参考题库含答案详解(5套)
- 临床技术操作规范耳鼻咽喉头颈外科分册
- 高考语文《文言文阅读》40篇专项练习(选自模拟真题)(含答案)
- 学堂在线 汽车理论 章节测试答案
- 感术行动培训课件
- 危险化学品法律法规培训
- 部编人教版六年级语文上册理解阅读专项练习(12篇)
- 梦幻丛林教学课件
- 房地产行业的舆情管理与危机处理
- 邮政银行校招笔试题目及答案
评论
0/150
提交评论