c++ - Const C++ 函数中的赋值

标签 c++ function constants variable-assignment operator-keyword

我有一个作业,我必须在其中编写一个简单的类。此类必须包含一个字符串数组,并包含“+”运算符的重载,它将两个数组的元素组合成一个新数组并返回它。

此外,这个函数必须是'const',这是我遇到问题的地方。尝试更改类“大小”属性及其持有的数组时,出现错误。尝试返回对象时我也遇到错误。我理解前两个错误的原因是因为我声明了函数“const”,但我的问题是,在 const 方法中重新分配这些值的正确方法是什么?

不要对我太坏,我才刚刚开始学习 C++,这些概念对我来说有点新鲜。我试过研究这个主题,但没有找到任何有用的答案。话虽这么说,我真的需要让这个功能正常工作,所以任何帮助将不胜感激。

这是类:

class FirstClass{

private:
    string* sList;
    unsigned int _size;

public:
    FirstClass(const unsigned int initSize = 1);
        // copy, assignment, and destructor 
    FirstClass& operator+(const FirstClass& add)const;
};





    FirstClass::FirstClass(const unsigned int initSize):_size(initSize)
{
    sList = new string[initSize];
    return;
}



FirstClass& FirstClass::operator+(const FirstClass& add)
const{
    if(add.sList){
        int prevSize = this->_size;
        this->_size += add._size;   // can't do this
        string newList[this->_size];


        for(int a=0; a<prevSize; a++){
            newList[a] = this->sList[a];
        }
        for(int b=0; b<add._size; b++){
            sList[b+prevSize] = add.sList[b];
        }
        delete [] sList;
        this->sList = newList; // or this
    }

    return *this; // or this
}

编辑:感谢您的快速回复,并澄清了我在做什么。这是我修改后的代码。

FirstClass FirstClass::operator+(const FirstClass& add)
const{
    FirstClass ma(this->_size + add._size); 
    if(add.sList){

        for(int a=0; a<this->_size; a++){
            ma.sList[a] = this->sList[a];
        }
        for(int b=0; b<add._size; b++){
            ma.sList[b+this->_size] = add.sList[b];
        }
    }

    return ma;
}

最佳答案

加法运算符应该返回一个新对象,而不是对其操作数之一的引用。 A+B 修改 AB 或返回对其中之一的引用没有任何意义。

考虑到这一点,很容易看出运算符如何成为常量。

FirstClass operator+(const FirstClass& rhs) const;

您可以实现一个变异的operator+=,并据此实现operator+:

FirstClass& operator+=(const FirstClass& rhs);

FirstClass operator+(const FirstClass& rhs) const 
{
  FirstClass ret = rhs;
  ret += *this;
  return ret;
}

或作为非成员(member):

FirstClass operator+(const FirstClass& lhs, const FirstClass& rhs)
{ 
  FirstClass ret = lhs;
  ret += rhs;
  return ret; 
}

关于c++ - Const C++ 函数中的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220412/

相关文章:

c++ - 无法通过引用捕获 lambda 中的成员变量

c++ - 如何将项目放入具有模板化父类(super class)类型的 vector 中

c++ - Visual C++ 和 C++ 之间有什么主要区别吗?

使用 c 中的结构、指针和子函数将笛卡尔坐标系上的点转换为极坐标系

C++读取数组cin错误

python - Python Print Function 中的函数打印

c++ - 在不同的对象函数中调用对象函数

c++ - 在 C++ 中将数组作为方法的 const 参数传递

vb6 - 为什么 TypeLib 枚举不在 Visual Basic 6.0 中公开为枚举?

wolfram-mathematica - 没有单位的 mathematica 物理常数