C++の純粋仮想関数と抽象クラス
抽象クラスは、少なくとも1つの純粋仮想関数を持つC++のクラスです。
-
抽象クラスは、純粋仮想関数とともに通常の関数と変数を持つことができます。
-
抽象クラスをインスタンス化することはできませんが、抽象クラスタイプのポインターと参照を作成できます。
-
抽象クラスは主にアップキャスティングに使用されるため、その派生クラスはそのインターフェイスを使用できます。
-
抽象クラスに派生クラスがある場合は、すべての純粋仮想関数を実装する必要があります。そうしないと、抽象クラスにもなります。
-
Vtableに純粋仮想関数用のスロットを予約しているため、抽象クラスのオブジェクトを作成することはできませんが、アドレスを設定しないため、Vtableは不完全なままになります。
サンプルコード
#include<iostream> using namespace std; class B { public: virtual void s() = 0; // Pure Virtual Function }; class D:public B { public: void s() { cout << "Virtual Function in Derived class\n"; } }; int main() { B *b; D dobj; b = &dobj; b->s(); }
出力
Virtual Function in Derived class
-
C#の抽象クラス
C#の抽象クラスには、抽象メソッドと非抽象メソッドが含まれます。クラスは、抽象クラスとして抽象として宣言されます。抽象クラスをインスタンス化することはできません。 抽象クラスVehicleと抽象メソッドdisplay()-がある例を見てみましょう。 public abstract class Vehicle { public abstract void display(); } 抽象クラスには、バス、車、オートバイの派生クラスがあります。以下は、バス派生クラスの実装です- public class Bus : Vehicle {
-
Scalaの特性と抽象クラスの違い。
特性 トレイトはJavaのインターフェースに似ており、traitキーワードを使用して作成されます。 抽象クラス 抽象クラスはJavaの抽象クラスに似ており、abstractキーワードを使用して作成されます。 例 以下は、特性と抽象クラスの使用法を示すScalaのプログラムです。 trait SampleTrait { // Abstract method def test // Non-Abstract method def tutorials() { &