【问题标题】:Overloading addition operator (adding a string to an object using a function)重载加法运算符(使用函数将字符串添加到对象)
【发布时间】:2019-02-13 21:43:47
【问题描述】:

我正在创建一个动态数组类,而且我是 C++ 新手。我在重载加法运算符以将字符串添加到对象时遇到问题。当我尝试添加字符串时,编译屏幕上没有显示任何内容。我还添加了我的复制构造函数、析构函数、重载的赋值运算符和重载的 ostream 运算符,以防万一这些都是问题。非常感谢您的帮助!!

DynamicStringArray::~DynamicStringArray()
{
    delete[] dynamic_Array;
    dynamic_Array = NULL;
}

DynamicStringArray::DynamicStringArray(const DynamicStringArray& first)
{
    size = first.returns_Size();

    dynamic_Array = new string[size];
    for (int n = 0; n < size; n++)
    {
        dynamic_Array[n] = first.get_Entry(n);
    }
}

void DynamicStringArray::operator =(const DynamicStringArray& first)
{
    this->size = first.returns_Size();

    this->dynamic_Array = new string[size];
    for (int i = 0; i < this->size; i++)
    {
        this->dynamic_Array[i] = first.get_Entry(i);
    }
}

ostream& operator <<(ostream& out, const DynamicStringArray& first) //nonmember requires 2 arguments
{
    for (int i = 0; i < first.size; i++)
    {
        out << first.dynamic_Array[i] << endl;
    }
    return out;
}

void DynamicStringArray::add_Entry(string a)
{
    string* Temp_Array = dynamic_Array; //old array
    dynamic_Array = new string[size + 1]; //new array
    
    for (int i= 0; i < size; i++) //copy old string values to temp array
    {
        dynamic_Array[i] = Temp_Array[i];
    }

    dynamic_Array[size] = a; //puts string a into last position of new array

    delete[]Temp_Array; //free memory space

    size++;
}

DynamicStringArray DynamicStringArray::operator +(const string& a)
{
    DynamicStringArray added;
    added.add_Entry(a);
    return added;
}
 

int main()
{
    DynamicStringArray fav_Foods;
    fav_Foods.add_Entry("pasta");
    fav_Foods.add_Entry("sushi");
    fav_Foods + "Burgers";
    cout << fav_Foods << endl;
}

【问题讨论】:

  • When I do try to add a string, nothing shows up on the compile screen. 您希望在编译屏幕上显示什么?
  • 所以出现的是列表:意大利面和寿司。但我希望更新列表以显示意大利面、寿司和汉堡。
  • 你是什么意思“编译屏幕上没有显示”? operator+() 没有可诊断的错误,因为它在语法上是正确的。您的问题将在于它做了什么(或不做什么),因为当您实现它时,z = x + y(其中 xDynamicStringArrayy 是一个字符串)将给出不相关的结果到x - 我怀疑这不是你想要的。

标签: c++ arrays string pointers


【解决方案1】:
DynamicStringArray DynamicStringArray::operator +(const string& a)
{
    DynamicStringArray added;
    added.add_Entry(a);
    return added;
}

您认为为什么需要创建一个新的DynamicStringArray added? 只需在当前实例上调用add_Entry(a)。此外,operator+() 应该返回对调用它的实例的引用:

 DynamicStringArray& DynamicStringArray::operator+(string const &a)
 {
     add_Entry(a);
     return *this;
 }

【讨论】:

  • 您已经实现了operator+(),因此它的工作方式更像是通常预期的operator+=()。这也意味着z = x + y 将始终更改x - 即使xz 不相关 - 这在加法运算符中并不是真正理想的行为。
  • @Peter 你说得对,最好叫operator+=()。但我的印象是,这就是 OP 想要的,因为他的线 fav_Foods + "Burgers";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多