0

これが許可されていない理由については漠然とした考えがありますが、より具体的なものを探しています。基本クラスのすべてのメソッドが必ずしも仮想ではない可能性があるという事実と関係があると思います。

誰でも私を助けることができますか?

4

2 に答える 2

1

実際、ほとんど許可されているため、これが許可されていない理由を説明するのは困難です。

#include <cstdio>

struct Base {
    int b;
    explicit Base(int b) : b(b) {}
};

struct Derived : Base {
    int d;
    explicit Derived(int d) : Base(d), d(d+1) {}
};

int main()
{
    Derived d(10);
    Base *b = &d;
    Derived *d2 = static_cast<Derived *>(b);

    printf("%d, %d\n", b->b, d2->d);
}
于 2012-11-19T16:30:27.913 に答える
1

派生クラスは、基本クラスでは不明な新しいメソッドと属性を定義する場合があります。このような状況では、Java&Co は例外をスローします。

C++ では、基本クラスへのポインターを静的キャストによって派生クラスに明示的にキャストすることができます (ただし、めったにすべきではありません)。元のポインターが基底クラスまたは別の派生クラスのオブジェクトを指している場合、何が起こるかは未定義です。

それを行う方法の例については、Vlad Lazarenko の awnser を参照してください。

于 2012-11-19T16:32:47.160 に答える