Абстрактный класс имеет внутренние виртуальные функции. Может ли абстрактный класс иметь внутренние виртуальные классы, которые будут реализованы позже?Как я могу реализовать внутренние абстрактные классы-члены в C++?
Я попытался следующие:
#include <bits/stdc++.h>
using namespace std;
class C1 {
public:
class Child {
int tmp;
virtual int getint() = 0;
};
virtual Child getChild() = 0;
};
class C2: public C1 {
public:
class Child {
int getint()
{
return 10;
}
} c;
Child getChild()
{
return c;
}
};
int main() { return 0; }
Ребенок является абстрактным классом, который будет отменяют в производных классах. И я надеюсь, что реализованный Ребенок может использоваться для определения функции.
Однако я получил ошибку:
invalid abstract return type for member function 'virtual C1::Child C1::getChild()'
я не могу реализовать внутренний абстрактный класс в производных классах, так же, как реализация виртуальной функции?
Это не имеет ничего общего с внутренними классами. Вы можете значительно упростить свой пример. Вот [mcve]: 'struct foo {virtual stuff() = 0; }; foo make_foo(); '. – juanchopanza
Вы не можете вернуть абстрактные объекты в качестве значения. Если вы это сделаете, как клиент может использовать его, поскольку отсутствуют недостающие реализации для «чистых виртуальных» функций ?. Однако вы можете вернуть указатель на такой объект. Дополнительно: в вашем примере 'Child' не является абстрактным. Отредактируйте его, так как кто-то может не понимать вашу проблему. –
@ MichałWalenciak Клиенты называют виртуальные функции, определенные в этом абстрактном классе. –