编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数文.pdfVIP

编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数文.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编写 strcpy 函数和类 String 的构造函数、析构函数、赋值 函数和重载运算符函数 已知 strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中 strDest 是目的字符串, strSrc 是源字符串。 (1)不调用 C++/C 的字符串库函数,请编写函数 strcpy char *strcpy(char *strDest, const char *strSrc); // 将源字符串加 const ,表明其为输 入参数 { assert((strDest!=NULL) (strSrc !=NULL)); // 2 分 // 对源地址和目的地址加非 0 断 言 char *address = strDest; // 2 分 // 为了实现链式操作,将目的地址返回 while( (*strDest++ = * strSrc++) != , 0? ) // 2 分 NULL ; return address ; // 2 分 } (2 ) strcpy 能把 strSrc 的内容复制到 strDest ,为什么还要 char * 类型的返回值? 答:为了实现链式表达式。 // 2 分 例如 int length = strlen( strcpy( strDest, “hello world ”) ); 二、网上广泛流传的,也是摘自林锐的 http://www.blog.sh/user3/skyflowing/archives/2006/60452.html 题目: 已知 strcpy 函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现 strcpy 函数。 2. 解释为什么要返回 char * 。 解说: 1.strcpy 的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((strDest==NULL)||(strsrc=/=NULL)) //[1] (我感觉应为&&) throw Invalid argument(s); //[2] char * strDestCopy=strDest; //[3] while ((*strDest++=*strSrc++)!=\0); //[4] return strDestCopy; } 错误的做法: [1] (A) 不检查指针的有效性,说明答题者不注重代码的健壮性。 (B) 检查指针的有效性时使用 ((!strDest)||(!strSrc)) 或 (!(strDeststrSrc)) ,说明答题者对 C 语言 中类型的隐式转换没有深刻认识。在本例中 char * 转换为 bool 即是类型隐式转换,这种功能虽然灵活, 但更多的是导致出错概率增大和维护成本升高。所以 C++ 专门增加了 bool 、true 、false 三个关键字以 提供更安全的条件表达式。 (C) 检查指针的有效性时使用 ((strDest==0)||(strsrc=/=0)) ,说明答题者不知道使用常量的好处。 直接使用字面常量(如本例中的 0 )会减少程序的可维护性。 0 虽然简单,但程序中可能出现很多处对指 针的检查, 万一出现笔误, 编译器不能发现, 生成的程序内含逻辑错误, 很难排除。 而使用 NULL 代替 0 , 如果出现拼写错误,编译器就会检查出来。 [2] (A)return new string(Invalid argument(s)); ,说明答题者根本不知道返回值的用途,并且他对 内存

文档评论(0)

蔡氏壹贰 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档