申し訳ありませんが、タイトルが不明ですが、私はすぐに言葉で苦労しています。私はちょうどそれに飛び込むます:この法的/安全なC++ですか? (同じサイズの継承クラスにダウンキャスト)
class A
{
public:
protected:
int doSomething();
};
class B : public A
{
public:
int doSomething() { return A::doSomething(); }
};
...
A *a = new A;
B *b = static_cast<B*>(a);
cout << b->doSomething();
は特に、BはAを継承し、任意のデータメンバや仮想関数を追加しないと、任意の仮想関数をオーバーライドしません。つまり、BのインスタンスはAのインスタンスと同じになるはずです。
基本的には安全ですか?私はそれが合法ではないと確信していますが、移植可能ですか?このようなことに頼ることの潜在的な影響はありますか?
明らかにこれは悪い習慣ですが、私はそれを見ているように見えます。それは代替物よりもよいかもしれません。しかし、もしあなたがそれが悪いかもしれない非明白な理由がある、私は間違いなく興味がある。
デザインによって異なります。 BがAと同じ型になることを望むかもしれません(Bのインスタンスを使用するのは、どこでも可能です)。また、後でBを拡張することもできます。 – vulkanino
編集:実際には、私はあなたの答えを読んだので、私はあなたが意味するものを参照してください。これは間違いなく有効な点です。 –