我在 C++ 中创建了一个 class Poly
,它具有如下定义的私有(private)成员。
private:
std::size_t sz;
std::vector <T> elem;
重载赋值运算符和/或下标运算符以将值赋给容器元素的标准方法是什么?例如:
Poly < double > obj{1, 2, 3};
obj[1] = 1;
应该将值 1 赋给第二个元素。
实现这一点的一种方法可能是:
T & operator[](int i) {
if(i < 0 || i >= sz)
throw std::out_of_range{"Poly::operator[]"};
return elem[i];
}
然而,这通过引用返回元素并且赋值是在类之外完成的,而不是由成员函数完成的。私有(private)成员是在对象外访问的,这不违反抽象原则吗?此外,无法确保检查不变量,也就是说,假设我们对可以分配的值有限制。
我宁愿有一个成员函数,例如:
void assign_val(T val, int idx)
{
//Check if the conditions hold...
//...
elem[idx]=val;
}
下标阅读:
const T & operator[](int i) const{
if(i < 0 || i >= sz)
throw std::out_of_range{"Poly::operator[]"};
return elem[i];
}
可以使用运算符重载获得这种效果吗?
最佳答案
不,你无法做到这一点。通过使用运算符,如果要为其赋值,则必须公开对变量的引用。此过程中不涉及函数调用,它通过在内存中提供实际存储值的位置来保持。
关于c++ - 下标赋值重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229320/