如何在c++中创建一个操作符,将一个数组复制到另一个数组
How to create an operator that copies one array to another in c++
我需要创建一个操作符,将一个数组中的内容复制到另一个数组。也就是一个相等运算符。我的想法是这样的:
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 =是为1重载的4个操作符(与[]、()和->一起)中的一个。数组不是类。
你能做的是
-
用命名函数代替
-
将数组包装成一个类
-
使用已经分配的
vector<vector<string> >
(<—我的投票在这里>)
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。
希望这对你有帮助!