Я пытаюсь решить мой вопрос относительно использования push_back более чем на одном уровне.Из комментариев / ответов ясно, что я должен:
- Создать оператор копирования, который принимает аргумент const
- Изменить все мои операторы на const
Но так как этот заголовочный файл мне дан, есть оператор, который я не могу преобразовать в const.Это просто:
float & operator [] (int i) {
return _item[i];
}
В данной программе этот оператор используется для получения и установки данных.
Моя проблема в том, что, поскольку мне нужен этот оператор в заголовочном файле, я не могу превратить все остальные операторы в const, что означает, что я не могу вставить оператор копирования.
Как я могу превратить все мои операторы в const, сохраняя при этом функциональность уже написанной программы?
Вот полное объявление класса:
class Vector3f {
float _item[3];
public:
float & operator [] (int i) {
return _item[i];
}
Vector3f(float x, float y, float z)
{ _item[0] = x ; _item[1] = y ; _item[2] = z; };
Vector3f() {};
Vector3f & operator = ( const Vector3f& obj)
{
_item[0] = obj[0];
_item[1] = obj[1];
_item[2] = obj[2];
return *this;
};
Vector3f & operator += ( const Vector3f & obj)
{
_item[0] += obj[0];
_item[1] += obj[1];
_item[2] += obj[2];
return *this;
};
bool operator ==( const Vector3f & obj) {
bool x = (_item[0] == obj[0]) && (_item[1] == obj[1]) && (_item[2] == obj[2]);
return x;
}
// my copy operator
Vector3f(const Vector3f& obj) {
_item[0] += obj[0];
_item[1] += obj[1];
_item[2] += obj[2];
return this;
}
};