私は変更できない既存のクラスA
に非仮想メソッドを追加したいと思います。したがって、A
から継承したクラスB
を作成し、必要なメソッドを追加します。さて、私がタイプA
のオブジェクトを持っている場合、それをタイプB
のオブジェクトと見なすことはできますか?言ってやるが、しかし、私は期待どおりに動作するために標準で保証されます場合は思っていた、法的次のコード?:C++では、非仮想メソッドのみを追加する派生クラスにキャストできますか?
class A { <...> };
class B: public A {
void f();
};
A a();
void g(const B&);
void h() { g(static_cast<B&&>(a())); }
これは、コンパイルして仕事んです。私はなぜそうは見えないのですが、それでもきれいに感じません。
いいえ、キャストによって未定義の動作が発生します –
'B a;'の後に 'A&'を 'void foo(A & a);')のように引数として受け取り、あなたが実際に 'a'が本当に' b'であることを知っていれば、fooの内部で(あなたはどうでしょうか?)、キャストを実行することができるように 'foo(a)'を定義します。 –
なぜオブジェクトをキャストしますか? – MikeMB