У меня есть простой класс точки:Как сделать класс со свойствами const присваиваемыми?
class Point {
public:
Point(const double, const double);
/** This constructor creates invalid point instance **/
Point();
~Point();
const double x;
const double y;
/** This returns true if one of the values is NaN **/
bool isInvalid() const;
/** Returns true if coordinates are equal **/
bool equal(const Point& p) const;
};
Значения x
и y
являются const
, так что я могу быть уверен, что они никогда не меняются. Они должны быть всегда постоянными. Проблема в том, что я не могу присвоить переменные холдинговые Point
:
Point somePoint;
... meanwhile, things happen ...
//ERROR: use of deleted function 'Point& Point::operator=(const Point&)'
somePoint = Point(x, y);
Я понимаю, что назначение является проблемой, потому что somePoint.x = something
запрещено. Мне нужно использовать точку удержания последнего значения точки во время рендеринга:
Point lastPoint;
PointInGraph* point = graphValues.last;
while((point = point->next())!=nullptr) {
// calculate pixel positions for point
double x,y;
...
if(!lastPoint.isInvalid())
drawer.drawLine(round(lastPoint.x), round(lastPoint.y), round(x), round(y));
// ERROR: use of deleted function 'Point& Point::operator=(const Point&)'
lastPoint = Point(x, y);
}
Так же const
в свойствах класса просто сделать любую переменную этого класса типа const
, а? Или есть обходной путь?
Если вы хотите изменить 'x' и' y' в какой-то момент, почему они 'const'? Может быть, вы просто хотите, чтобы они были «частными» и были заменены только оператором присваивания? Или 'lastPoint' может быть просто указателем. – TartanLlama
@TartanLlama Я не помню, чтобы сказать, что хочу изменить их. Я хочу заменить весь экземпляр класса, поэтому 'point = Point (...)'. –
Но назначение означает модификацию. Похоже, вам просто нужен необработанный указатель. – TartanLlama