これが許可されていない理由については漠然とした考えがありますが、より具体的なものを探しています。基本クラスのすべてのメソッドが必ずしも仮想ではない可能性があるという事実と関係があると思います。
誰でも私を助けることができますか?
これが許可されていない理由については漠然とした考えがありますが、より具体的なものを探しています。基本クラスのすべてのメソッドが必ずしも仮想ではない可能性があるという事実と関係があると思います。
誰でも私を助けることができますか?
実際、ほとんど許可されているため、これが許可されていない理由を説明するのは困難です。
#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);
}
派生クラスは、基本クラスでは不明な新しいメソッドと属性を定義する場合があります。このような状況では、Java&Co は例外をスローします。
C++ では、基本クラスへのポインターを静的キャストによって派生クラスに明示的にキャストすることができます (ただし、めったにすべきではありません)。元のポインターが基底クラスまたは別の派生クラスのオブジェクトを指している場合、何が起こるかは未定義です。
それを行う方法の例については、Vlad Lazarenko の awnser を参照してください。