Хотелось бы вернуть объект виртуального базового класса, чтобы мне не приходилось иметь дело с управлением памятью (идея программирования функций также стимулирует это стремление).Это означает, что я ищу некоторые вещи, как показано ниже:
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.В этом аспекте С ++ кажется немного многословным и противоречащим интуиции.Чаще всего я чувствую, что C ++ - это «указатель на язык объектного программирования» вместо «языка объектного программирования», потому что без указателя вы не сможете получить слишком много преимуществ от объектного программирования.