Что бы я хотел, если бы не с этим синтаксисом, а по духу:
class A
{
virtual A f()=0;
};
class B : public A
{
B f();
};
Я вижу проблему с кодом выше: A является виртуальным, поэтому ни один экземпляр A не может быть создан,следовательно, ни один экземпляр A не может быть возвращен.
Тем не менее, конкретные подклассы A (например, B) должны будут реализовать функцию f, которая всегда сможет вернуть экземпляр себя (например, экземпляр B)то есть экземпляр подкласса A.
Хотя вышеприведенное неверно и не компилируется, есть ли способ получить что-то подобное действительным? Возможно, но не обязательно, например:
class A
{
virtual "a concrete sublclass of A" f()=0;
};
примечание: я предпочитаю не возвращать указатель или ссылку, так как я бы предпочел, чтобы B не управлял своим экземпляром как атрибутом.
примечание: если возможно, c ++ 11, но любопытно также узнать о более новых версиях