Я хочу создать класс (например, VectorSpace), который будет иметь определенные методы, абстрактно представленные в классе. Я недавно перешел с Java на c ++, и я нахожу проблемы при попытке перефразировать объявление общего абстрактного метода в java
Ситуация такова, что c ++ не допускает объявление, такое как:AbstractClass methodName (...) = 0;Java, с другой стороны, позволяет возвращаемому типу быть абстрактным классом. Это не разрешено в c ++, и компиляция приводит к ошибке, говорящей, что абстрактный класс не может действовать как тип возврата для метода. Я прошел через эту страницу: возвращает абстрактный класс из функции . Поэтому в c ++ я сделал следующее:
//Fields are any classes which +,* defined on them
template<class F> class VectorSpace
{
virtual VectorSpace<F>* operator+(const VectorSpace<F>& el) const =0;
virtual VectorSpace<F>* operator-() const =0;
virtual VectorSpace<F>* operator*(const F& el) const =0;
....
};
class Vector : public VectorSpace<double>
{
....
Vector* operator+(const VectorSpace<double>& el) const {return new Vector(....);}
}
Однако проблема с этим будет в том, что я буду использовать «new» для создания экземпляра объекта для любого класса, который является подклассом VectorSpace (например, Vector) всякий раз, когда применяются какие-либо операторы (например, +, -), которые необходимо будет удалить вручную.
Есть ли способ обойти это?