【发布时间】:2017-05-17 08:27:02
【问题描述】:
抽象类具有内部虚函数。 抽象类可以有内部虚拟类供以后实现吗?
我尝试了以下方法:
#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; }
Child 是一个抽象类,将在派生类中被覆盖。并且我希望实现的Child可以用来定义一个函数。
但是,我得到了一个错误:
成员函数“virtual C1::Child C1::getChild()”的抽象返回类型无效
我不能在派生类中实现一个内部抽象类,就像实现一个虚函数一样吗?
【问题讨论】:
-
这与内部类没有任何关系。您可以大大简化您的示例。这是minimal reproducible example:
struct foo { virtual stuff() = 0; }; foo make_foo();。 -
您不能将抽象对象作为值返回。如果这样做,客户端如何使用它,因为缺少
pure virtual函数的实现?但是,您可以返回指向此类对象的指针。另外:在您的示例中,Child不是抽象的。编辑它,因为有人可能不理解您的问题。 -
@MichałWalenciak 客户端调用该抽象类中定义的虚函数。
-
@ZehuiLin:我知道,但是您返回了“不完整”对象,它怎么能工作? :)
-
在另一个类中定义的类与未定义的类之间的唯一区别是它们的名称范围。你有两个不相关的类;
C1::Child和C2::Child.
标签: c++ abstract-class internal-class