仮想クラスとは何ですか?
仮想クラスは、メモリで一度だけ割り当てられるクラスであるため、そのクラスの子供はメモリで確立された親クラスの1つのコピーのみを使用します。クラスは、共通の特性または属性を共有するオブジェクトのグループです。クラス仮想を作成すると、2番目以上の世代の親クラスが共通の先祖基地クラスから派生したときに、オブジェクト指向のプログラミング言語に複数の継承を使用する能力を提供します。参照されるコンピュータープログラミング言語に応じて、「仮想」キーワード、同様のキーワード、またはクラスのセマンティクスを使用して、特定のクラスが仮想と見なされることを意味します。 C ++のようなプログラミング言語では、クラスは両方の親クラスのすべてのメンバーデータとメンバー機能を一度に継承し、両方のPARセットにアクセスできますentデータと関数。多重継承をサポートする他の言語には、Perl、Python、TCL、およびEiffelが含まれます。
問題は、子のクラスの作成に使用される2人以上の親クラスがもともと1つまたは同じ祖父母クラスのみから派生した場合、多発性継承階層で発生します。これはダイヤモンド問題と呼ばれます。この名前は、この状況で階層がどのように見えるかに起因する名前です。 コンパイラプログラムが、祖父母の2つの親クラスから作られた孫クラスなど、クラスをインスタンス化しようとすると、祖父母の2つのコピーがメモリで作成されます。
メモリの同じ祖父母の複数のコピーによって引き起こされるあいまいさのため、コンパイラは祖父母が祖父母のデータまたは機能にアクセスするために使用する祖父母のコピーを確認することができません。この状況を改善するために、c ++では祖父母はバーチになります両親を宣言するときのualクラス。これにより、コンパイラは両親が共有する祖父母のコピーを1つだけ作成します。祖父母が仮想クラスになったら、コンパイラは祖父母のコピーが1つしかないため、孫が祖父母にどのようにアクセスするかを決定するのに問題はありません。
クラスの階層を構築するとき、特にそれらが将来的にはるかに大きな階層のベースに含まれる場合、または将来的にはより大きな階層のベースになる場合は、細心の注意を払う必要があります。仮想クラスの適切な利用により、クラスの階層により、開発において大きな緯度が得られます。ただし、見つけるのが難しいエラーを引き起こす可能性があります。ソリッドコンピュータープログラミングエンジニアリングの原則の研究は、不適切なプログラム組織からの予期しない副作用が発生しないようにするのに役立ちます。