zoukankan      html  css  js  c++  java
  • 面试题1:赋值运算符函数

    #include <iostream>
    #include <string>
    using namespace std;
    
    class CMyString
    {
    public:
    
    CMyString(char *pData=NULL);//构造函数
    CMyString(const CMyString &str);//复制构造函数
    CMyString& operator=(const CMyString &str);
    
    ~CMyString(void);//析构函数
    
    void Print();
    private:
    char *m_pData;
    };
    
    void CMyString::Print()
    {
    cout<<m_pData<<endl;
    }
    
    CMyString::CMyString(char *pData)
    {
    if(pData==NULL)
    {
    m_pData=new char[1];
    m_pData[0]='\0';
    }
    else
    {
    int len=strlen(pData);
    m_pData=new char[len+1];
    strcpy(m_pData,pData);
    }
    
    }
    
    CMyString::CMyString(const CMyString &str)
    {
    int len=strlen(str.m_pData);
    m_pData=new char[len+1];
    strcpy(m_pData,str.m_pData);
    }
    
    
    CMyString& CMyString::operator=(const CMyString &str)
    {
    if(this==&str)//判断传入的参数和当前实例是不是同一个实例
    return *this;
    
    delete [] m_pData;//释放实例自身已有的内存
    m_pData=new char[strlen(str.m_pData)+1];
    strcpy(m_pData,str.m_pData);
    
    return *this;
    }
    
    CMyString::~CMyString()
    {
    delete[] m_pData;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    char *test="Hello Offer!";
    char *test2="Hello MayDay!"; CMyString str1; CMyString str2(test1);
    CMyString str3(test2); cout
    <<"str3赋值给str2,str2赋值给str1:"<<endl; str1=str2=str3; str1.Print(); str2.Print(); cout<<"str2赋值给自己"<<endl; str2=str2; str2.Print(); return 0; }

    重载赋值操作符时应注意:

    1、是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(*this)。【只有返回一个引用,才可以允许连续赋值】测试:str1=str2=str3,是否通过。

    2、是否把传入的参数的类型声明为常亮引用。【如果传入的参数不是引用而是实例,那么从形参到实参会调用一次复制构造函数,(无谓的消耗)】把参数声明为引用可以避免这样无谓的消耗,提高代码的效率。【不会改变传入的实例状态,引用参数加上const关键字】。

    3、是否释放实例自身已有的内存。【在分配新内存之前要释放自身已有的空间,否则,内存泄露】

    4、是否判断传入的参数和当前的实例(*this)是不是同一个实例。【若不进行判断,释放了自身的内存的同时,传入的参数内存也被释放了,就找不到需要赋值的内容了】

  • 相关阅读:
    浏览器刷新缓存机制
    Asp.Net获取IP的方法
    c# 了解委托
    用什么方法来判断字符串是否存在的函数
    怎么样从地址中获得数据?
    新网站如何不被百度查封,请注意以下事项。
    搜索引擎如何抓取网页和如何索引网页?
    什么情况下include_path不起作用?
    用户注册演示程序操作案例
    用户提交的cookie提交时为什么传不到服务器
  • 原文地址:https://www.cnblogs.com/Mikuroro/p/4559133.html
Copyright © 2011-2022 走看看