我想超载等于" ="
中的C ++运算符class Array
{
int *p;
int len;
};
定义了所有函数/构造函数等。
我的问题: 有人能给我运算符重载函数的原型吗? 并假设:
Array a,b;
b=a;
" a"和" b"将被隐式传递并明确传递?
提前致谢。
答案 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中的变体,可能是相关的,因为没有发布其他代码)。