1

抽象クラスには内部仮想関数があります。抽象クラスは、後で実装する内部仮想クラスを持つことができますか?

私は次のことを試しました:

#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()' の抽象戻り型が無効です

仮想関数を実装するのと同じように、派生クラスに内部抽象クラスを実装することはできませんか?

4

3 に答える 3

0

あなたの投稿から、あなたは物事を混乱させているようです。抽象クラスを読み直して、簡単な例を自分で試してみることをお勧めします。

Child は抽象クラスであり、後で実装されます。実装された Child を使用して関数を定義できることを願っています。

純粋な仮想メソッド(virtual int getint() = 0;あなたの例では)は、「後で」実装することを意図していません。これは、派生クラスのオーバーライド メソッドによって実装されることを意図しています。

たとえば、持っている場合

class Child {
   virtual int getint() = 0;
};

あなたにはできない

class Child {
   virtual int getint() { return 10; }
};

または

int Child::getint() { return 10; }

しばらく経って。

あなたができることは次のとおりです。

class Derived : public Child
{
   int getint() override { return 10; }
};
于 2017-01-03T09:57:41.420 に答える