重载+运算符以添加数组
Overloading the + operator to add arrays
我试图通过重载加法运算符将两个排序的列表合并在一起。我只需要遍历第一个和第二个列表一次,然后将每个元素添加到新列表中,然后返回。我收到一个错误,说运算符必须接受零个或一个参数,但当我尝试一个参数时,也不起作用。这是我的代码:
template<class mytype>
OrderedList<mytype> operator+ (const OrderedList<mytype>& a,const OrderedList<mytype>& b)
{
int size = a.size() + b.size();
int i=0, j=0, k=0;
OrderedList<mytype> newList(size);
while (i < a.size() && j < b.size())
{
if (a.get(i) <= b.get(j))
{
newList.list[k] = a.list[i];
i++;
} else
{
newList.list[k] = list[j];
j++;
}
k++;
if (i < a.size())
{
for (int p = i; p < a.size(); p++)
{
newList.list[k] = a.list[p];
k++;
}
} else
{
for (int p = j; p < count; p++)
{
newList.list[k] = list[p];
k++;
}
}
}
return newList;
}
如果二进制运算符是非成员函数,则只能用两个参数声明它们。在OrderedList<mytype>::operator+
中使用作用域解析运算符::
表示operator+
是OrderedList<mytype>
的成员函数,但如果是这样,则不能使用两个参数。第一个参数是指向当前对象的指针,第二个参数是右手参数。
如果函数在OrderedList<type>
中被声明为friend
,那么它是一个非成员函数,您可以将其定义为:
OrderedList<mytype> operator+(const OrderedList<mytype>& a, const OrderedList<mytype>& b);
也就是说,没有范围解析操作符。
如果它被声明为成员函数(仅取右侧),那么您将其定义为:
OrderedList<mytype> OrderedList<mytype>::operator+(const OrderedList<mytype>& b);
其中左手边的自变量隐含地为this
。
您当前的operator+
正在接受3
参数。两个显式和一个隐式(this
)。所以这不是一个有效的operator+
。编译器告诉您的0
或1
自变量是您正在编写成员函数的事实,因此this
中的一部分应该:
- 采用0个附加参数(并具有一元
operator+
,如int x = +a
中所示) - 取1个额外的参数(并具有二进制
operator+
,如int x = a + b
)
你想要的可能是第二个。因此,您可以执行以下任一操作:
- 将正文中出现的所有
a
替换为(*this)
- 将该运算符移出类,并有效地声明一个自由函数(推荐)
相关文章:
- 如何将元素添加到数组的线程安全函数?
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 添加到数组指针
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 将数组的元素添加到链表中
- 如何在C++中将元素添加到非固定大小的数组中?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 在 char* 数组中添加两个索引
- c++ 如何在数组的开头添加值并为其编制索引?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 添加数组特定列的元素
- 添加数组元素:需要左键作为赋值的左操作数
- 添加数组所有元素的 SSE 指令
- 如何添加数组的偶数和奇数之和
- 向std::multimap添加数组值
- 用内部类函数递归地添加数组数
- 使用自增操作符添加数组元素
- 创建一个模板函数,如果数据类型不同,则添加数组的元素