Мне хотелось бы вернуть объект виртуального базового класса, чтобы мне не нужно было заниматься управлением памятью (идея программирования функций также стимулирует это стремление). Это означает, что я ищу некоторые вещи, как показано ниже:
class Car
{
public:
virtual int price() = 0 ;
virtual string brand() = 0 ;
}
class Interface
{
public:
virtual Car giveMeACar() = 0 ;
virtual vector<Car> listMeAllTheCars() = 0 ;
}
Однако это даже не будет скомпилировано из-за того, что Car является абстрактным интерфейсом с сообщением об ошибке:
неверный абстрактный тип возврата для функция-член '
virtual Car giveMeACar() = 0
; поскольку следующие виртуальные функции чисты внутри 'Car
':int price()
string brand()
;
Итак, это означает, что я должен пересмотреть интерфейс на что-то вроде ниже и управлять самой памятью (удалить экземпляр после его использования) - исключая возможность использования интеллектуального указателя.
class Interface
{
public:
virtual Car* giveMeACar() = 0 ;
virtual vector<Car*> listMeAllTheCars() = 0 ;
}
Мой вопрос: это единственный вариант, который у меня есть при разработке интерфейса, где все вещи (класс) являются абстрактными?
Возвращение объекта класса интерфейса отлично подходит для Java. С++, похоже, является многословным и очень интуитивно понятным в этом аспекте. Чаще всего я считаю, что С++ является "указателем на язык программирования объектов" вместо "языка программирования объектов", потому что без указателя вы не можете получить слишком много преимуществ от программирования объектов.