海涛老师的面试题-作业1-赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数
View Code
// CMyString.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string.h> #include <stdio.h> class CMyString { private: char* m_data; public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print(); }; CMyString::CMyString(char* pData) { if(pData==NULL) { m_data=new char[1]; m_data[0]='\0'; } else { int length=strlen(pData); m_data=new char[length+1]; strcpy(m_data,pData); } } CMyString::CMyString(const CMyString& str) { int length=strlen(str.m_data); m_data=new char[length+1]; strcpy(m_data,str.m_data); } CMyString::~CMyString() { delete []m_data; } #if 0 CMyString& CMyString::operator =(const CMyString& str) { if(this==&str) return *this; delete []m_data; m_data=NULL; m_data=new char[strlen(str.m_data)+1]; strcpy(m_data,str.m_data); return *this; } #endif #if 1 CMyString& CMyString::operator =(const CMyString& str) { if(this!=&str) { CMyString Tmp(str); char* pTemp=Tmp.m_data; Tmp.m_data=m_data; m_data=pTemp; } return *this; } #endif void CMyString::Print() { printf("%s\n",m_data); } void Test1( ) { printf("测试正常赋值非空值开始! \n"); char* const_str="helloworld!"; CMyString str(const_str); str.Print(); printf("测试正常赋值非空值结束! \n"); } void Test2( ) { printf("测试赋值给自己开始! \n"); char* const_str="helloworld!"; CMyString str(const_str); str=str; printf("const_str =%s\n",const_str); str.Print(); printf("测试赋值给自己结束! \n"); } void Test3() { printf("测试连等赋值开始! \n"); char* const_str="helloworld!"; CMyString str1(const_str); CMyString str2,str3; str3=str2=str1; printf("const_str =%s\n",const_str); str1.Print(); str2.Print(); str3.Print(); printf("测试连等赋值结束! \n"); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); Test2(); Test3(); return 0; }