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

C++の静的データメンバー


静的データメンバーは、staticキーワードを使用して宣言されたクラスメンバーです。クラスオブジェクトが多数ある場合でも、クラスには静的データメンバーのコピーが1つだけあります。これは、すべてのオブジェクトが静的データメンバーを共有しているためです。静的データメンバーは、ファーストクラスオブジェクトが作成されるときに常にゼロに初期化されます。

静的データメンバーの構文は次のとおりです-

static data_type data_member_name;

上記の構文では、staticキーワードが使用されています。 data_typeは、int、floatなどのC ++データ型です。data_member_nameは、データメンバーに提供される名前です。

C++の静的データメンバーを示すプログラムは次のとおりです-

#include <iostream>
#include<string.h>

using namespace std;
class Student {
   private:
   int rollNo;
   char name[10];
   int marks;
   public:
   static int objectCount;
   Student() {
      objectCount++;
   }

   void getdata() {
      cout << "Enter roll number: "<<endl;
      cin >> rollNo;
      cout << "Enter name: "<<endl;
      cin >> name;
      cout << "Enter marks: "<<endl;
      cin >> marks;
   }

   void putdata() {
      cout<<"Roll Number = "<< rollNo <<endl;
      cout<<"Name = "<< name <<endl;
      cout<<"Marks = "<< marks <<endl;
      cout<<endl;
   }
};
int Student::objectCount = 0;
int main(void) {
   Student s1;
   s1.getdata();
   s1.putdata();
   Student s2;

   s2.getdata();
   s2.putdata();
   Student s3;

   s3.getdata();
   s3.putdata();
   cout << "Total objects created = " << Student::objectCount << endl;
   return 0;
}

出力

上記のプログラムの出力は次のとおりです-

Enter roll number: 1
Enter name: Mark
Enter marks: 78
Roll Number = 1
Name = Mark
Marks = 78

Enter roll number: 2
Enter name: Nancy
Enter marks: 55
Roll Number = 2
Name = Nancy
Marks = 55

Enter roll number: 3
Enter name: Susan
Enter marks: 90
Roll Number = 3
Name = Susan
Marks = 90
Total objects created = 3

上記のプログラムでは、クラスの生徒には、生徒のロール番号、名前、マークを示す3つのデータメンバーがあります。 objectCountデータメンバーは、クラスStudentで作成されたオブジェクトの数を含む静的データメンバーです。 Student()は、新しいクラスオブジェクトが作成されるたびにobjectCountをインクリメントするコンストラクターです。

クラスには2つのメンバー関数があります。関数getdata()はユーザーからデータを取得し、putdata()はデータを表示します。このためのコードスニペットは次のとおりです-

class Student {
   private:
   int rollNo;
   char name[10];
   int marks;
   public:
   static int objectCount;
   Student() {
      objectCount++;
   }

   void getdata() {
      cout << "Enter roll number: "<<endl;
      cin >> rollNo;
      cout << "Enter name: "<<endl;
      cin >> name;
      cout << "Enter marks: "<<endl;
      cin >> marks;
   }

   void putdata() {
      cout<<"Roll Number = "<< rollNo <<endl;
      cout<<"Name = "<< name <<endl;
      cout<<"Marks = "<< marks <<endl;
      cout<<endl;
   }
};

関数main()には、クラスStudentの3つのオブジェクト、つまりs1、s2、およびs3があります。これらのオブジェクトごとに、getdata()とputdata()が呼び出されます。最後に、objectCountの値が表示されます。これを以下に示します-

int main(void) {
   Student s1;
   s1.getdata();
   s1.putdata();

   Student s2;
   s2.getdata();
   s2.putdata();

   Student s3;
   s3.getdata();
   s3.putdata();

   cout << "Total objects created = " << Student::objectCount << endl;

   return 0;
}

  1. C++での循環キューデータ構造

    キューは、要素のコレクションを含む抽象的なデータ構造です。キューはFIFOメカニズムを実装します。つまり、最初に挿入された要素も最初に削除されます。 キュー杖は1つの線形データ構造です。ただし、配列を使用してキューを実装すると、問題が発生する可能性があります。挿入と削除を連続して行うと、前後の位置が変わる場合があります。その瞬間、キューには要素を挿入するスペースがないように見えます。空きスペースがあっても、論理的な問題により使用されません。この問題を解決するために、循環キューのデータ構造を使用します。 循環キューは、最後の位置が最初の位置に接続されて円を描くタイプのキューです。 例 #in

  2. C++での二分木の簡潔なエンコーディング

    二分木があるとします。私たちが知っているように、バイナリツリーの簡潔なエンコーディングは可能な限り低いスペースに近いパフォーマンスを発揮します。 n番目のカタラン数は、n個の異なるノードを持つ構造的に異なる二分木の数によって指定されます。 nが大きい場合、これは約4nです。したがって、それをエンコードするには、log2(4)n=2nビット程度の最小値が必要です。したがって、簡潔な二分木は2n + O(n)ビットを消費します。 したがって、入力が次のような場合 その場合、出力は次のようになります エンコードされた- 構造リスト111 0 0 1 0 0 1 0 1 0 0 デー