C ++の仮想基本クラスとは何ですか?
仮想基本クラスは、派生クラスに基本クラスの複数のコピーがある場合に使用されます。
サンプルコード
#include <iostream> using namespace std; class B { public: int b; }; class D1 : public B { public: int d1; }; class D2 : public B { public: int d2; }; class D3 : public D1, public D2 { public: int d3; }; int main() { D3 obj; obj.b = 40; //Statement 1, error will occur obj.b = 30; //statement 2, error will occur obj.d1 = 60; obj.d2 = 70; obj.d3 = 80; cout<< "\n B : "<< obj.b cout<< "\n D1 : "<< obj.d1; cout<< "\n D2: "<< obj.d2; cout<< "\n D3: "<< obj.d3; }
上記の例では、D1とD2の両方がBを継承し、両方ともBの単一のコピーを持っています。ただし、D3はD1とD2の両方を継承しているため、D3にはBの2つのコピーがあります。1つはD1から、もう1つはD2からです。
上記の例のステートメント1と2は、コンパイラがD3のbの2つのコピーを区別できないため、エラーを生成します。
D3からBの複数のコピーを削除するには、D1とD3のBを仮想クラスとして継承する必要があります。
したがって、仮想基本クラスを使用する上記の例は、-
になります。サンプルコード
#include<iostream> using namespace std; class B { public: int b; }; class D1 : virtual public B { public: int d1; }; class D2 : virtual public B { public: int d2; }; class D3 : public D1, public D2 { public: int d3; }; int main() { D3 obj; obj.b = 40; // statement 3 obj.b = 30; // statement 4 obj.d1 = 60; obj.d2 = 70; obj.d3 = 80; cout<< "\n B : "<< obj.b; cout<< "\n D1 : "<< obj.d1; cout<< "\n D2 : "<< obj.d2; cout<< "\n D3 : "<< obj.d3; }
出力
B : 30 D1 : 60 D2 : 70 D3 : 80
これで、D3にはBのコピーが1つだけあり、ステートメント4はステートメント3で指定されたbの値を上書きします。
-
C ++の変数のストレージクラスとは何ですか?
ストレージクラスは、C ++プログラム内の変数や関数のスコープ(可視性)と存続期間を定義します。これらの指定子は、変更するタイプの前にあります。 C++プログラムで使用できる次のストレージクラスがあります。 自動 登録 静的 外部 可変 Cでは、自動ストレージクラス指定子を使用すると、自動ストレージを使用して変数を明示的に宣言できます。自動ストレージクラスは、ブロック内で宣言された変数のデフォルトです。自動ストレージを持つ変数xは、xが宣言されたブロックが終了すると削除されます。 自動ストレージクラス指定子は、ブロックで宣言された変数の名前または関数パラメーターの名前にのみ適用できます
-
C#の基本クラスとは何ですか?
クラスを作成するとき、プログラマーは、完全に新しいデータメンバーとメンバー関数を作成する代わりに、新しいクラスが既存のクラスのメンバーを継承するように指定できます。この既存のクラスは基本クラスと呼ばれ、新しいクラスは派生クラスと呼ばれます。 クラスは複数のクラスまたはインターフェースから派生させることができます。つまり、複数の基本クラスまたはインターフェースからデータと関数を継承できます。 以下は、C#の基本クラスの構文です- <access-specifier> class <base_class> { ... } class <