海涛老师的面试题作业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;
}
原文地址:https://www.cnblogs.com/cslave/p/2561181.html