如何在c++中创建一个操作符,将一个数组复制到另一个数组

How to create an operator that copies one array to another in c++

本文关键字:一个 数组 复制 另一个 操作符 c++ 创建      更新时间:2023-10-16

我需要创建一个操作符,将一个数组中的内容复制到另一个数组。也就是一个相等运算符。我的想法是这样的:

    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。

希望这对你有帮助!

相关文章: