运算符重载“等于”

时间:2014-10-18 06:57:44

标签: c++ operator-overloading

我想超载等于" ="

中的C ++运算符
class Array
{
    int *p;
    int len;
};

定义了所有函数/构造函数等。

我的问题: 有人能给我运算符重载函数的原型吗? 并假设:

Array a,b;
b=a;

" a"和" b"将被隐式传递并明确传递?

提前致谢。

3 个答案:

答案 0 :(得分:1)

原型是Array& operator=(const Array& that)

在实施此操作时,请记住rule of three并充分利用copy-and-swap idiom

答案 1 :(得分:0)

可能有多种方法可以做到,但这是一个选项。

公共职能:

Array::Array(const Array& array)
{
    Allocate(0);
    *this = array;
}

Array::~Array()
{
    Deallocate();
}

const Array& Array::operator=(const Array& array)
{
    if (this == &array)
        return *this;

    Deallocate();
    Allocate(array.len);

    for (int i=0; i<len; i++)
        p[i] = array.p[i];

    return *this;
}

非公开职能:

void Array::Allocate(int size)
{
    len = size;
    if (len > 0)
        p = new int[len];
}

void Array::Deallocate()
{
    if (len > 0)
        delete[] p;
    len = 0;
}

当然,您总是可以使用vector<int>代替......

答案 2 :(得分:0)

您正在寻找赋值运算符= 等于,即operator==,通常用作相等比较)

class Array
{
    int *p;
    int len;

public:
    // Assignment operator, remember that there's an implicit 'this' parameter
    Array& operator=(const Array& array)
    {
        // Do whatever you want
        std::cout << "assignment called";

        return *this;
    }
};


int main(void) {

    Array a, b;

    a = b;
}

记住,既然你写了“所有函数/构造函数等已定义”,你应该注意你需要你的班级做什么,也可能像rule of three中那样实现析构函数(和/或看看它在C ++ 11中的变体,可能是相关的,因为没有发布其他代码)。