• 海涛老师的面试题作业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;
    }
  • 相关阅读:
    Android混淆
    Web开发人员应当知道的15个开源项目
    应用开发10种免费推广的方法
    (转载)Comparing C++ and C (Inheritance and Virtual Functions)
    JCTVC 会议输出文档
    HEVC bit depth increasment
    函数指针声明时的形参列表可以没有
    关于链接 Linkage
    二级指针和二维数组
    C 与 C++互相调用函数,变量
  • 原文地址:https://www.cnblogs.com/cslave/p/2561181.html
Copyright © 2020-2023  润新知