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

C++の純粋な仮想デストラクタ


純粋な仮想デストラクタはC++で可能です。クラスに純粋な仮想デストラクタが含まれている場合は、純粋な仮想デストラクタの関数本体を提供する必要があります。

サンプルコード

#include <iostream>
using namespace std;

class B {
   public:
   virtual ~B()=0; // Pure virtual destructor
};

B::~B() {
   std::cout << "Pure virtual destructor is called";
}

class D : public B {
   public:
   ~D() {
      cout << "~D() is executed"<<endl;
   }
};

int main() {
   B *bptr=new D();
   delete bptr;
   return 0;
}

出力

~D() is executed
Pure virtual destructor is called

  1. C++の純粋関数

    純粋関数は、同じ引数値に対して常に同じ結果を返します。結果を返すだけで、引数の変更、I / Oストリーム、出力の生成などの追加の副作用はありません。 いくつかの純粋関数はsin()、strlen()、sqrt()、max()、pow()、floor()などです。いくつかの純粋関数はrand()、time()などです。 純粋関数のいくつかを実証するためのいくつかのプログラムは次のとおりです- strlen() strlen()関数は、文字列の長さを見つけるために使用されます。これは、次のプログラムで示されています- 例 #include<iostream> #include&

  2. C ++で仮想デストラクタを使用するのはいつですか?

    効果的なC++のScottMeyersによると- クラスに仮想関数がある場合は、仮想デストラクタが必要です。基本クラスとして設計されていないクラス、または多態的に使用されるように設計されていないクラスは、仮想デストラクタを宣言しないでください。 したがって、ポリモーフィック基本クラスで仮想デストラクタを宣言する必要があります。これは、派生コンストラクターを使用して基本クラスのオブジェクトを作成する場合- Base *b = new Derived(); // use b delete b; Baseのデストラクタが仮想でない場合、この場合、deletebの動作は未定義です。デストラクタへ