C++虚継承の意味と使用
768 ワード
虚継承:複数の派生クラスが同じベースクラスの同名メンバーを保存する場合、異なるデータメンバーに異なるデータを別々に保存できますが、同じ部分しか必要ありません.
複数の親重複メンバーが1つしか残っていないという問題を解決しました.
例えば、今ソファーベッドがあります.ベッドの属性もソファーの属性もあります.それらは長幅の高い属性を持っていますが、私たちはその状態の属性を知る必要があります.
その1つの長さと幅は複数の状態を体現することができる.
家具{
プロパティ:長さ、幅、高さ;
}
ソファーベッド:publicソファー、publicベッド{
プロパティ:長さ、幅、高さ;
}
ソファ:public家具----》改为:ソファ:virtual public家具
{
プロパティ:長さ、幅、高さ;
}
ベッド:public家具----ベッド:virtual public家具
{
プロパティ:長さ、幅、高さ;
}
私たちは彼らの共通属性の長さと幅だけでいいので、共通属性を家具類として提出して、異なる状態で継承することができます(虚継承)が、最後にはソファーベッドに帰属します.
ベッド、ソファー、ソファーベッドのアスペクトを変更すると、それらの異なる状態のアスペクトが変化します.
複数の親重複メンバーが1つしか残っていないという問題を解決しました.
例えば、今ソファーベッドがあります.ベッドの属性もソファーの属性もあります.それらは長幅の高い属性を持っていますが、私たちはその状態の属性を知る必要があります.
その1つの長さと幅は複数の状態を体現することができる.
家具{
プロパティ:長さ、幅、高さ;
}
ソファーベッド:publicソファー、publicベッド{
プロパティ:長さ、幅、高さ;
}
ソファ:public家具----》改为:ソファ:virtual public家具
{
プロパティ:長さ、幅、高さ;
}
ベッド:public家具----ベッド:virtual public家具
{
プロパティ:長さ、幅、高さ;
}
私たちは彼らの共通属性の長さと幅だけでいいので、共通属性を家具類として提出して、異なる状態で継承することができます(虚継承)が、最後にはソファーベッドに帰属します.
#include
using namespace std;
class Base{
public:
Base(int d=100):data(d){
cout<
ベッド、ソファー、ソファーベッドのアスペクトを変更すると、それらの異なる状態のアスペクトが変化します.