我需要创建一个将一个数组中的内容复制到另一个数组的运算符。 A.K.A是一个平等的运营商。我正在思考这些问题:
operator=(string array[10][10], string array2[10][10])
{
int row = 0; int column = 0;
for(column=0; column<=9; column++)
{
for(row=0; row<=9; row++){
array2[row][column]=array[row][column];
}
}
}
我只是不确定运算符声明的语法哪个是我的问题。即使我将上面显示的代码弄错了,我也知道如何制作内部代码。我只是不确定如何写“operator =(string ....)”
答案 0 :(得分:9)
你做不到。有两个原因
你能做的是
有一个命名函数而不是运算符
将数组包装到类
使用已经有作业的vector<vector<string> >
(&lt; - 我的投票在这里)
1 至于为什么这些必须是成员,你可以看到我的这个问题:Rationale of enforcing some operators to be members
答案 1 :(得分:1)
除非其中一个参数属于类类型(或者运算符是模板),否则不能在C ++中重载运算符。这是有道理的,因为否则你可以做疯狂的事情,比如在整数上重新定义内置+运算符来做减法:
int operator+ (int lhs, int rhs) { // Not legal
return lhs - rhs; // Whoops!
}
对于你正在做的事情,你试图重新定义operator =
对数组的意义,这是不允许的。而且,这不是一个好主意,因为如果要成功它会违反最小惊喜原则,因为你会制作这样的代码,通常是非法的突然编译:
string array[10][10], string array2[10][10];
array = array2; // Problem; this isn't legal C++ code!
如果要支持数组深度复制,则需要编写自己的函数来执行此操作,而不是重载的赋值运算符。或者,也许是一个更好的想法,你应该考虑将数组包装在类或结构中。然后,您可以在该类或结构上重载operator =
以执行深层复制。除此之外,您还可以获得额外的好处,即可以阻止人们在无效索引处访问数组,因为您可以定义检查索引的getter和setter。
希望这有帮助!