c++ 赋值运算符

来源:互联网 发布:美国文献数据库 编辑:程序博客网 时间:2024/05/22 11:47

1. 作用

赋值运算符"="的作用是将一个表达式的值赋给一个左值。

2. 一般形式

A&A::operaton=(A &a)

{

if(this == &a)    //自检查

return *this;

......                    //将a的成员赋给自己

return *this;

}

特别需要注意的是如果A是一个派生类,则在赋值成员前需要调用基类的赋值函数:base::operator=(rhs);

3. 返回引用的原因

因为赋值运算符会改变左值,所以赋值运算符重载要返回引用以用于类似(a = b) = c;这样连续赋值的情形。

4. 重载时只能作为成员函数

赋值运算符重载时只能是成员函数,如果允许operator=为全局的,那么将会导致重新定义内置的"=":

int operator=(int , MyType); //即将非int赋给int变量

这种做法是不允许的,编译器通过强制operator=为成员函数来避开这个问题。当创建一个operator=时,必须从右侧对象中拷贝所以需要的信息到当前对象。

5. 需要自检查的原因

String& String::operate=(const String &other)
{
    if(this==&other)
        return *this;
    delete []m_data;
    int length=strlen(other.m_data);
    m_data=new char[lenght+1];
    strcpy(m.data,other.m_data);
    return *this;
}

对应上面的code,如果没有做自检查,那么首先会去释放原来的内存资源,在拷贝,这样显然是错误的。

有些情况不做自检查也是可以的,但最好还是加上(这样做不会带来麻烦, 最起码省去了给成员赋值的操作,对性能可能会有一点提升)

0 0
原创粉丝点击