从昨天开始,我希望自己能够每天坚持下来。每天一道面试题,每天都有成长。距离找工作的日子越来越近,珍惜现在的学生生活。希望我能坚持下来,好好地努力,找到一个理想的工作。其实,一直在犹豫到底使用哪种语言去做这些题目,现在终于想通了,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;


}