//AssignmentOperator.cpp : Defines the entry point for the console application.//
//《剑指Offer——名企面试官精讲典型编程题》代码//著作权所有者:何海涛
#include"stdafx.h"#include
classCMyString
{public:
CMyString(char* pData =NULL);
CMyString(const CMyString&str);~CMyString(void);
CMyString& operator = (const CMyString&str);voidPrint();private:char*m_pData;
};
CMyString::CMyString(char *pData)
{if(pData ==NULL)
{
m_pData= new char[1];
m_pData[0] = '\0';
}else{int length =strlen(pData);
m_pData= new char[length + 1];
strcpy(m_pData, pData);
}
}
CMyString::CMyString(const CMyString &str)
{int length =strlen(str.m_pData);
m_pData= new char[length + 1];
strcpy(m_pData, str.m_pData);
}
CMyString::~CMyString()
{delete[] m_pData;
}
CMyString& CMyString::operator = (const CMyString&str)
{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);return *this;
}//====================测试代码====================
voidCMyString::Print()
{
printf("%s", m_pData);
}voidTest1()
{
printf("Test1 begins:\n");char* text = "Hello world";
CMyString str1(text);
CMyString str2;
str2=str1;
printf("The expected result is: %s.\n", text);
printf("The actual result is:");
str2.Print();
printf(".\n");
}//赋值给自己
voidTest2()
{
printf("Test2 begins:\n");char* text = "Hello world";
CMyString str1(text);
str1=str1;
printf("The expected result is: %s.\n", text);
printf("The actual result is:");
str1.Print();
printf(".\n");
}//连续赋值
voidTest3()
{
printf("Test3 begins:\n");char* text = "Hello world";
CMyString str1(text);
CMyString str2, str3;
str3= str2 =str1;
printf("The expected result is: %s.\n", text);
printf("The actual result is:");
str2.Print();
printf(".\n");
printf("The expected result is: %s.\n", text);
printf("The actual result is:");
str3.Print();
printf(".\n");
}int _tmain(int argc, _TCHAR*argv[])
{
Test1();
Test2();
Test3();return 0;
}