2

サブクラスがスーパークラスからメソッドを継承できることは知っていますが、スーパークラスはそのサブクラスに対して同じことを行うことができますか? 例えば:

Alpha *a = new Alpha ();
Beta *b = new Beta ();
Gamma *g = new Gamma ();
g = b; 

4 番目のステートメントでは、Gamma オブジェクトを Beta オブジェクトとして作成していますが、Gamma はスーパー クラスであり、beta はサブ クラスです。したがって、g が b へのポインターを取得するか、このコードがコンパイルされず、どちらの答えが正しいかよくわかりません。誰かが明確にしてくれれば、それは素晴らしいことです。

4

2 に答える 2

2

技術的には継承できませんが、 Curiously Recurring Template Pattern(CRTP)を使用すれば使用できます。

template<class SubClass>
class SuperClass
{
    void DoSomething()
    {
        static_cast<SubClass *>(this)->Foo();
    }
};

class SubClass: public SuperClass<SubClass>
{
    void Foo();
};
于 2012-12-10T21:08:52.460 に答える
1

いいえ、スーパークラスはそのサブクラスからメソッドを継承することはできません。なぜなら、一般に、スーパークラスはそれから派生したものについて何の知識も持つべきではないからです。

于 2012-12-10T20:52:57.003 に答える