C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の純粋仮想関数と抽象クラス


純粋仮想関数はC++の仮想関数であり、関数定義を記述する必要はなく、宣言するだけで済みます。宣言に0を割り当てることで宣言されます。

抽象クラスは、少なくとも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

  1. C#の抽象クラス

    C#の抽象クラスには、抽象メソッドと非抽象メソッドが含まれます。クラスは、抽象クラスとして抽象として宣言されます。抽象クラスをインスタンス化することはできません。 抽象クラスVehicleと抽象メソッドdisplay()-がある例を見てみましょう。 public abstract class Vehicle {    public abstract void display(); }  抽象クラスには、バス、車、オートバイの派生クラスがあります。以下は、バス派生クラスの実装です- public class Bus : Vehicle {    

  2. Scalaの特性と抽象クラスの違い。

    特性 トレイトはJavaのインターフェースに似ており、traitキーワードを使用して作成されます。 抽象クラス 抽象クラスはJavaの抽象クラスに似ており、abstractキーワードを使用して作成されます。 例 以下は、特性と抽象クラスの使用法を示すScalaのプログラムです。 trait SampleTrait {    // Abstract method    def test    // Non-Abstract method    def tutorials() {     &