从昨天开始,我希望自己能够每天坚持下来。每天一道面试题,每天都有成长。距离找工作的日子越来越近,珍惜现在的学生生活。希望我能坚持下来,好好地努力,找到一个理想的工作。其实,一直在犹豫到底使用哪种语言去做这些题目,现在终于想通了,C++是个不错的选择。坚持努力下去吧!参考了一些网上的代码,自己对照着学习了下。

代码:

#include <iostream>
#include <stdlib.h>
using namespace std;class CMyString
{
public:CMyString( char* pData = NULL);   //构造函数CMyString( const CMyString& str);  //拷贝构造函数~CMyString( void );  //析构函数CMyString& CMyString::operator = (const CMyString &str);  //重载赋值运算符void CMyString::print(); //打印字符串private:char* m_pData;   //数据域,字符指针
};//打印字符串
void CMyString::print()
{cout<< m_pData <<endl;
}//构造函数CMyString::CMyString(char* pData)
{if(pData == NULL){m_pData = new char[1];m_pData[0]='\0';}else{int len = strlen(pData);m_pData = new char[len+1];strcpy(m_pData, pData);}
}//拷贝构造函数
CMyString::CMyString(const CMyString& str)
{int len = strlen(str.m_pData);m_pData = new char[len+1];strcpy(m_pData, str.m_pData);
}//析构函数
CMyString::~CMyString(void)
{delete[] m_pData;
}//重载运算符
CMyString& CMyString::operator=(const CMyString &str)
{/** 解法一:这种解法没有考虑到如果删掉m_pData后,new char时内存不足的问题//如果传入的参数与当前的实例是同一个实例,则直接返回自身if(this == &str)return *this;//否则的话,删掉原来的,再重新创建内存空间为其赋值delete[] m_pData;m_pData = NULL;m_pData = new char[strlen(str.m_pData)+1];strcpy(m_pData, str.m_pData);**//**比较好的解法二:先new成功后再delete if(this != &str){char* temp = new char[strlen(str.m_pData)+1];delete[] m_pData;strcpy(m_pData, str.m_pData);}return *this;**//**更好的解法三 先创建一个临时实例,再交换临时实例和原来的实例**/if( this != &str){//先创建一个临时实例CMyString temp(str);//临时变量(相当于变量交换时临时变量)char*  pTemp = temp.m_pData;  //(1)把临时实例中的数放到一个新生成的临时变量中去;temp.m_pData = m_pData;  //(2)把当前实例的数放到临时实例中去了。m_pData = pTemp;       // (3)把临时变量的数再赋给当前实例,从而完成当前实例与临时实例的交换}return *this;}int main()
{char* test = "hello world!";CMyString str1(test);CMyString str2;str2 = str1;str1.print();str2.print();cout<<"---------------------------"<<endl;char* test2 = "zbhzbn";CMyString str3(test2);str3 = str3;str3.print();str3.print();system("pause");return 0;}

转载于:https://www.cnblogs.com/zbhzbn/p/4537036.html

2015.5.28 面试题1:赋值运算符函数相关推荐

  1. 剑指offer 面试题1:赋值运算符函数【C++版本】

    题目总结与代码归档: [剑指offer-2]题目目录[C++版本] GitHub代码路径: GitHub 面试题1 赋值运算符函数 题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符 ...

  2. [剑指offer]面试题1:赋值运算符函数

    面试题1:赋值运算符函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString {public:CMyString(char *pData = nu ...

  3. 《剑指offer》面试题1:赋值运算符函数 思考总结

    目录 题目 注意事项 相关知识点 异常安全性 bad_alloc 1.举例 2.异常处理 题目 注意事项 对于本题,正如书中所讲我们需要注意以下几点: 考虑返回值的类型:只有返回一个引用,才可以允许连 ...

  4. (剑指Offer)面试题1:赋值运算符函数

    题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{ public:     CMyString(char* pData=NULL);     ...

  5. 面试题1:赋值运算符函数

    题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char *pData=NULL);//构造函数 CM ...

  6. Contest2071 - 湖南多校对抗赛(2015.03.28)

    Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.csu.edu.cn/OnlineJudge/contest.php?c ...

  7. 百度2015校园招聘笔试题

    百度2015校园招聘笔试题(自己凭记忆第一时间,记录了这么多,有些描述比较简单,请大神们补充) 一 .简答题(30分) 1. 进程和线程的联系与区别. 2. 简述数据库的存储过程及其优点. 3. st ...

  8. 湖南多校对抗赛(2015.03.28)

    Contest2071 - 湖南多校对抗赛(2015.03.28) Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.cs ...

  9. 赋值运算符函数严谨性的几点思考

    1. 需求 class CMyString { public:CMyString(char* pData = NULL);CMyString(const CMyString& str);~CM ...

最新文章

  1. css解决div子元素margin溢出的问题
  2. 理解JSON对象:JSON.parse、 JSON.stringify
  3. hadoop配置文件详解系列(二)-hdfs-site.xml篇
  4. Java Review - 使用Timer时需要注意的事情
  5. 【转】store_schema.sql
  6. mac svn 使用
  7. Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值
  8. 中国天然驱蚊剂行业市场供需与战略研究报告
  9. RedHat 7本地yum源的配置
  10. 用android程序帮美女换衣服源码
  11. tcpdf开发文档(中文翻译版)
  12. Android Studio连接夜神模拟器
  13. python培训班心得_Python学习心得
  14. 用Android studio设计贺卡,功能强大的贺卡设计制作软件推荐:Hallmark Card Studio
  15. MGR新加节点一直recovering故障解决
  16. MDS中的caps和Locker
  17. 如何表格合并快速简单?
  18. 范渊免职——网安界其人曾异军突起又将“落幕”?
  19. Vista和DirectX 10(转载)
  20. soso地图api接口地理解析geocoder检索示例----并在信息框显示经纬度

热门文章

  1. bzoj2753: [SCOI2012]滑雪与时间胶囊
  2. 关于一些对location认识的误区(转)
  3. WordPress Terillion Reviews插件HTML注入漏洞
  4. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  5. 第9章:Bootstrap Token方式增加Node
  6. heima Oracle day2
  7. 9.1 ps:查看进程
  8. class ts 扩展方法_JUnit 5自定义扩展
  9. 如何保证 Serverless 业务部署更新的一致性?
  10. 超详解析Flutter渲染引擎|业务想创新,不了解底层原理怎么行?