How can I implement internal abstract member classes in c++?
抽象类具有内部虚函数。抽象类是否可以有内部虚拟类供以后实现?
我尝试了以下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #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()'
我不能在派生类中实现内部抽象类,就像实现虚函数一样吗?
在本法中,
这样的错误很容易通过使用在C++ 11中可用的EDCOX1×7说明符来捕获。
在不知道您试图实现什么的确切上下文的情况下,可能的代码应该如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class C1 { // ... same virtual Child& getChild() = 0; // ^^^^^^ reference }; class C2 : public C1 { // ^^^^^^ did you miss this? public: class Child : public C1::Child { // ^^^^^^^^^ inheritance int getint() override { return 10; } } c; Child& getChild() override { return c; } }; |
此外,您下面的陈述似乎令人困惑:
"Child is a abstract class, which will be implemented later,"
与
1 2 3 | class Outer { public: class Inner; }; // ... class Outer::Inner { ... }; |
理论上,
在您的代码中,
因此,
virtual C1::Child* getChild() = 0; 或virtual C1::Child& getChild() = 0;
另外,由于
从你的职位上看,你似乎很困惑。我建议你重新阅读抽象类,并自己尝试一些简单的例子。
Child is a abstract class, which will be implemented later, And I hope
the implemented Child can be used to define a function.
纯虚拟方法(示例中的
例如,如果你有
1 2 3 | class Child { virtual int getint() = 0; }; |
你做不到
1 2 3 | class Child { virtual int getint() { return 10; } }; |
也不
1 | int Child::getint() { return 10; } |
稍后。
你能做的是:
1 2 3 4 | class Derived : public Child { int getint() override { return 10; } }; |