抽象クラスには内部仮想関数があります。 抽象クラスは後で実装する内部仮想クラスを持つことができますか?内部抽象メンバクラスを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
抽象オブジェクトを値として返すことはできません。そうすれば、 'pure virtual'関数の実装が欠落しているので、クライアントはどのようにそれを使用できますか?ただし、そのようなオブジェクトへのポインタを返すことはできます。さらに:あなたの例では '子'は抽象ではありません。あなたの問題を誰かが理解できないかもしれないので、それを編集してください。 –
@MichałWalenciakクライアントは、抽象クラスで定義された仮想関数を呼び出します。 –