- 1、本文档共222页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c primerth详细答案打印版.doc
练习 2.16语言不应该支持所谓的 Type-constraint(类型约束)语法.有三个理由:
?? 它会使 templates 更复杂.
?? 无论如何用户总是能够检验Type 是否提供了“得以顺利将此 template 实例化”的必要函数;
如果他们遗漏了,编译器会对此实例化行为发出错误讯息,指出某个函数有所谓的隐式约束
(implicit constraint),而不只是发出错误信息说这个 template 的实例化是错误的.
?? 请看 LL 练习 2.16 出现的脚注,其中所描述的习惯.
练习 2.17这是正确的语意.另一种做法是在 class template 被产生出来时即检验此一 template 的所有可能
用法.这会造成编译时间的严重浪费.不过此种语意的缺点是,以某个类型将 template 实例化,在程
序 A 中也许可以有效运作,在程序 B 中也许不能成功,视被调用的函数而定.
练习 2.18以下事情有可能在这个函数中出现错误:
?? file_name 可能是个空字符串(empty string).
?? ifstream constructor 可能无法打开文件,即使 file_name 是一个有效字符串.
?? 文件起始处可能并不内含一个 int 数值.
?? elem_cnt 可能收到一个不正确的值:太大、或 0、或负值.
?? allocate_array() 为 elem_cnt 个元素分配空间,可能失败.
?? while 循环读到太多元素;这个循环会在遇到EOF(或读取int 失败)时结束,但它并未考虑pi
所指数组的大小.
?? sort_array() 会对 pi 所指向的数组排序,该数组假想有elem_cnt 个元素.但是while 循
环可能在读入elem_cnt 个元素之前就结束,因为输入端的 ints 个数不足,并因而造成数组的
剩余部分没有初值.
?? sort_array() 可能会收到一个无效指针 pi,因为此处并未检查allocate_array() 的返回值;
这个错误可能会造成程序在循环内当掉.
练习 2.19int *alloc_and_init(string file_name)
{
ifstream infile(file_name.c_str());
int elem_cnt;
infile elem_cnt;
try {
int *pi = allocate_array(elem_cnt);
int elem;
int index = 0;
while (cin elem)
pi[index++] = elem;
sort_array(pi, elem_cnt);
register_data(pi);
return pi;
}
catch(const noMem n){
cout allocate_array() error n endl;
}
catch(int i){
cout sort_array() error i endl;
}
catch(const string s){
cout register_data() error s endl;
}
}
练习 2.20int *alloc_and_init(string file_name)
{
try {
ifstream infile(file_name.c_str());
if (!infile)
throw cannot open file;
int elem_cnt;
infile elem_cnt;
if (!infile || elem_cnt = 0)
throw invalid elem_cnt;
int *pi = allocate_array(elem_cnt);
int elem;
int index = 0;
while (cin elem){
if (index = elem_cnt)
throw too many input elements;
pi[index++] = elem;
}
sort_array(pi,index);
register_data(pi);
return pi;
}
catch(const noMem n){
cout allocate_array() error n endl;
throw; // 重新丢出(rethrow)exception 以便通知用户
}
catch(int i){
cout sort_array() error i endl;
throw;
}
catch(const string s){
cout register_data() error s endl;
t
您可能关注的文档
最近下载
- 2024年道德与法治新教材培训:总体变化、单元要点以及主题呈现.docx VIP
- 部编版语文五年级上册第五单元习作《介绍一种事物》课件.pptx VIP
- 病区医院感染管理规范ppt课件.pptx
- 建筑施工安全检查标准JGJ59-2011(2011必威体育精装版版)_图文.doc VIP
- 新人教版高中数学必修第二册全套PPT课件配套word讲义及作业(1300页).pptx
- 五年级语文上册第一单元习作:我的心爱之物课件(共52张PPT).pptx VIP
- 乙流护理查房ppt课件.pptx
- 上海-杨梦娇-同底数幂的乘法.pptx VIP
- (必威体育精装版)24年秋统编版四年级语文上册习作:我的家人【教案及反思】.docx
- GB10810.5-2012 眼镜镜片 第5部分: 镜片表面耐磨要求.pdf
文档评论(0)