如果我const
从复制构造函数中删除MyArray(const MyArray& cArrayInput)
,一切都很好。否则在该行会出现以下编译错误m_paArray[i] = cArrayInput[i]
:
错误 C2678:二进制“[”:未找到采用“const MyArray”类型的左侧操作数的运算符(或没有可接受的转换)。
我知道我可以使用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];
}
};