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

C ++で純粋な仮想デストラクタが必要なのはなぜですか?


C++プログラムで純粋な仮想デストラクタを許可しても悪影響はありません。基本クラスのデストラクタの前に派生クラスのデストラクタが最初に呼び出されるため、純粋な仮想デストラクタの関数本体を提供する必要があります。したがって、関数本体を指定しないと、オブジェクトの破棄中に呼び出されるものが見つからず、エラーが発生します。 。定義を使用して純粋な仮想デストラクタを作成することで、抽象クラスを簡単に作成できます。

サンプルコード

#include <iostream>
using namespace std;

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

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

class D : public B {
   public: ~D() {
   cout << "~Derived\n";
   }
};

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

出力

~Derived
Pure virtual destructor is called

  1. C++の純粋関数

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

  2. C ++にスコープ解決演算子が必要なのはなぜですか?

    ::(スコープ解決)演算子は、スコープが可変であるために非表示の名前を取得して、引き続き使用できるようにするために使用されます。スコープ解決演算子は、単項とバイナリの両方として使用できます。 名前空間スコープまたはグローバルスコープ名がブロックまたはクラスでの同じ名前の明示的な宣言によって非表示になっている場合は、una​​ryスコープ演算子を使用できます。たとえば、my_varという名前のグローバル変数とmy_varという名前のローカル変数がある場合、グローバルmy_varにアクセスするには、スコープ解決演算子を使用する必要があります。たとえば、 例 #include <iostrea