【问题标题】:Overloading Operator + with two arrays c++用两个数组重载运算符+ C++
【发布时间】:2018-03-02 03:31:35
【问题描述】:
DynamicArray DynamicArray::operator+(const DynamicArray& rhs) const
{
    int count = 0;
    int tempCapcacity = mCapacity;
    int newCapacity = mCapacity + rhs.mCapacity;

    string *temp = allocateAndCopyToNewArray(mWords, mNumWords, newCapacity);

    for (int i = tempCapcacity; i < newCapacity; i++)
    {
       temp[i] = rhs.mWords[count];
       count++;
    }

    return *this;
 }

试图让一个重载的运算符组合两个字符串数组。该函数必须是 const 所以我无法更改成员数据。我怎样才能返回这个临时数组?

【问题讨论】:

  • 你不能按照现在的代码。您需要创建一个新的 DynamicArray 来存储结果并返回。
  • 我们不知道DynamicArray内部...

标签: arrays c++11 operator-overloading this


【解决方案1】:

您可以改为将其设为非成员函数。所以它不必是常量。我不确定你的 DynamicArray 实现是如何工作的,所以我将只使用 std::vector 函数存根来表示我的想法

    template<typename T>
    DynamicArray<T> operator + (const DynamicArray<T?& lhs, const DynamicArray<T>& rhs)
    {
        const uint prev_size = lhs.size();
        DynamicArray result = lhs;
        result.resize(result.size() + rhs.size()); // Let whatever internal resizing policy take over
        memcpy(&result.data()[prev_size], rhs.data(), rhs.size() * sizeof(T));
        return result;
    }

基本上我在这里做的是复制 lhs,然后添加所需的元素以使列表能够以足够的空间复制,然后在另一端的开头复制 rhs 数据。添加它们

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2020-12-13
    • 2010-12-13
    • 1970-01-01
    • 2023-03-13
    • 2015-05-10
    相关资源
    最近更新 更多