gpt4 book ai didi

c++ - 如何在复制构造函数中调用重载的下标?

转载 作者:行者123 更新时间:2023-11-30 03:00:32 24 4
gpt4 key购买 nike

如果我从复制构造函数 MyArray(const MyArray& cArrayInput) 中删除 const,一切都很好。否则在 m_paArray[i] = cArrayInput[i] 行会出现以下编译错误:

error C2678: binary '[' : no operator found which takes a left-hand operand of type 'const MyArray' (or there is no acceptable conversion).

我知道我可以使用 cArrayInput.m_paArray[i]。但是如何使用重载的下标函数呢?

class MyArray
{
private:
int m_nLength;
double* m_paArray;
public:
MyArray():m_nLength(0),m_paArray(0)
{
}
// copy constructor
MyArray(const MyArray& cArrayInput)
{
m_nLength = cArrayInput.m_nLength;
m_paArray = new double[m_nLength];
for(int i=0;i<m_nLength;i++)
m_paArray[i] = cArrayInput[i];
}
double& operator[](const int nIndex)
{
assert(nIndex >= 0 && nIndex < m_nLength);
return m_paArray[nIndex];
}
};

最佳答案

问题是您在 MyArrayconst 实例上调用非常量运算符。所以你需要提供 operator[]const 版本:

const double& operator[](const int nIndex) const
{
assert(nIndex >= 0 && nIndex < m_nLength);
return m_paArray[nIndex];
}

请注意,除了非常量版本之外,您还可以提供此版本

顺便说一句,如果索引超出范围,除了调用 assert 之外,可能是一个想法。例如,您可以抛出异常。这使调用者代码至少有机会恢复并做一些事情。 std::out_of_range异常是为这些情况设计的。

关于c++ - 如何在复制构造函数中调用重载的下标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com