zoukankan      html  css  js  c++  java
  • 海涛老师的面试题作业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;
    }
  • 相关阅读:
    移动端hybrid开发复盘
    node/webpack 调试 loader 等技巧
    javascript(js)小数精度丢失的解决方案
    必经之路--买房之后需要走的流程--针对 组合贷款方式
    canvas 画半圆的两种方式
    svg path 画圆
    1.快速排序
    7.桥接设计模式
    6.适配器设计模式
    5.策略设计模式
  • 原文地址:https://www.cnblogs.com/cslave/p/2561181.html
Copyright © 2011-2022 走看看