Используйте определенные операторы из базового класса в унаследованном классе.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Используйте определенные операторы из базового класса в унаследованном классе.

Сообщение Anonymous »

Предположим, у меня есть базовый класс

Код: Выделить всё

class Vector
{
public:
Vector(const std::vector &elements);

static Vector add(const Vector &v1, const Vector &v2);

Vector Vector::operator+(const Vector &v) const
{
return add(*this, v);
}

Vector &Vector::operator+=(const Vector &v)
{
*this = add(*this, v);
return *this;
}

float operator[](size_t index) const;

private:
std::vector _elements;
}

И производный класс для трехэлементного вектора:

Код: Выделить всё

class Vector3 : public Vector
{
public:
Vector3(float x, float y, float z);
};
Что мне нужно сделать, чтобы использовать операторы с производным классом?
Моим решением было переопределить операторы в производном классе следующим образом: :

Код: Выделить всё

Vector3 Vector3::operator+(const Vector3 &v) const
{
Vector res = Vector::operator+(v);
return Vector3(res[0], res[1], res[2]);
}

Vector3 &Vector3::operator+=(const Vector3 &v)
{
Vector res = Vector::operator+=(v);
*this = Vector3(res[0], res[1], res[2]);
return *this;
}
Пока это работает, но мне интересно, правильный ли это путь. Для меня это очень похоже на двойную работу. Более того, я не совсем понимаю, почему мне вообще нужно переопределять операторы. Это потому, что я не могу выполнить преобразование из Vector в Vector3? Мое простое предположение заключалось в том, что Vector3 аналогичен Vector с размером 3, поэтому, на мой взгляд, нет никакой разницы, которая была бы важна для конкретной задачи оператора. Если бы кто-нибудь мог просветить меня, есть ли лучший подход, это было бы здорово.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ited-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»