面试题 1,赋值运算函数 P41

 

这是一道关于字符串封装类的题,涉及到运算符的重载。

要注意以下四点:

1. 传入参数必须为const;

2. 因为是赋值运算符,存在连续赋值的情况,因此返回值要为引用值;(具体原因下面会探讨)

3. 释放已有内存;

4. 判断要赋值与被赋值是否实际上是同一个实例。

代码如下:

CMyString& CMyString::operator =(const CMyString &oriString){
    if(this == &oriString){
        //The same object
        return *this;
    }
    delete m_pData;
    m_pData = new char[strlen(oriString.m_pData) + 1];
    strcpy(m_pData, oriString.m_pData);
    return *this;
}

此代码为自己编写,对照答案修改后的代码。

错误注意点:

this在C++的类中是一个指针,比较时直接使用 this。
返回值定义为引用,但是return的时候依然是返回一个值,需要使用*来取值,不要把引用和地址混淆。

strlen不会计算最后的\0位,因此分配内存需要考虑+1

posted on 2013-11-21 20:46  Felix Fang  阅读(155)  评论(0)    收藏  举报

导航