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

C ++に仮想コンストラクターがないのはなぜですか?


仮想メカニズムは、派生クラスオブジェクトへの基本クラスポインタがある場合にのみ機能します。

C ++では、コンストラクターを仮想にすることはできません。これは、クラスのコンストラクターが実行されるときに、メモリに仮想テーブルがないため、仮想ポインターがまだ定義されていないことを意味します。したがって、コンストラクターは常に非仮想である必要があります。

ただし、仮想デストラクタは可能です。これが例です

#include<iostream>
using namespace std;
class b {
   public:
   b()
   { cout<<"Constructing base \n"; }
   virtual ~b()
   { cout<<"Destructing base \n"; }
};
class d: public b {
   public:
      d()
      { cout<<"Constructing derived \n"; }
      ~d()
      { cout<<"Destructing derived \n"; }
};
int main(void) {
   d *derived = new d();
   b *bptr = derived;
   delete bptr;
   return 0;
}

出力

Constructing base
Constructing derived
Destructing derived
Destructing base



  1. C#にグローバル変数がないのはなぜですか?

    C#にはグローバル変数がなく、C++でグローバル変数に使用されるスコープ解決演算子は名前空間に関連しています。これは、グローバル名前空間エイリアスと呼ばれます。 別の名前空間で識別子を共有するタイプがある場合は、スコープ解決演算子を使用してそれらを識別します。 たとえば、System.Consoleクラスを参照するには、スコープ解決演算子-を指定してグローバル名前空間エイリアスを使用します。 global::System.Console 例を見てみましょう- 例 using myAlias = System.Collections; namespace Program {  

  2. Chrome で非常に多くのプロセスが実行されているのはなぜですか?

    Google Chrome を実行しているコンピュータでタスク マネージャを開いて、ブラウザがバックグラウンドで開いているプロセスの数を確認したことがありますか? 2 つまたは 3 つのタブしか開いていない場合でも、タスク マネージャーにはさらに多くの Chrome エントリが表示されます。それらはすべて、ブラウザに関連付けられたプロセスを表しています。 非常に多くのプロセスを実行する Chrome が利点か欠点か、およびこれらのプロセスの数を減らす方法を調べてください。 タスク マネージャーで Chrome のプロセスを確認する方法 タスク マネージャーは、コンピューターのパフォー