Getter 和 Setter 用于 class C++ 中的数组元素
Getter and Setter for element of array inside class C++
我有 class Matrix4f
,它有一个名为 elements
的浮点数数组。我需要用这些 elements
做一些操作,我做了:
float* Matrix4f::operator[](int index)
{
if (index < 0 || index > MAX_MATRIX_SIZE - 1)
return NULL;
return &elements[index];
}
然后我通过以下方式联系接线员:
*Matrix[index] = 2;
我想在不使用 * 的情况下使用此运算符来取消引用指针以获取和设置值。所以我想要的是这样的:
Matrix[index] = 2;
float someValue = Matrix[index] * cos(angle);
我该如何实现?
你应该return一个引用而不是指针,这将消除对访问值的取消引用的需要。这看起来像这样:
float& Matrix4f::operator[](int index)
{
return elements[index];
}
但是,这会使您的边界检查失效,您将不得不添加另一种机制,例如断言。例如,您可以添加
assert(index >= 0 && index < MAX_MATRIX_SIZE);
确保您没有越界。您也可以抛出异常或任何在您的情况下似乎是个好主意的东西。
我有 class Matrix4f
,它有一个名为 elements
的浮点数数组。我需要用这些 elements
做一些操作,我做了:
float* Matrix4f::operator[](int index)
{
if (index < 0 || index > MAX_MATRIX_SIZE - 1)
return NULL;
return &elements[index];
}
然后我通过以下方式联系接线员:
*Matrix[index] = 2;
我想在不使用 * 的情况下使用此运算符来取消引用指针以获取和设置值。所以我想要的是这样的:
Matrix[index] = 2;
float someValue = Matrix[index] * cos(angle);
我该如何实现?
你应该return一个引用而不是指针,这将消除对访问值的取消引用的需要。这看起来像这样:
float& Matrix4f::operator[](int index)
{
return elements[index];
}
但是,这会使您的边界检查失效,您将不得不添加另一种机制,例如断言。例如,您可以添加
assert(index >= 0 && index < MAX_MATRIX_SIZE);
确保您没有越界。您也可以抛出异常或任何在您的情况下似乎是个好主意的东西。