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

staticキーワードとC++でのそのさまざまな使用法


staticキーワードを使用すると、変数またはデータのメンバーまたは関数を再度変更することはできません。プログラムの存続期間中に割り当てられます。静的関数は、クラス名を使用して直接呼び出すことができます。

静的変数は一度だけ初期化されます。コンパイラは、プログラムが終了するまで変数を保持します。静的変数は、関数の内部または外部で定義できます。それらはブロックに対してローカルです。静的変数のデフォルト値はゼロです。静的変数は、プログラムが実行されるまで存続します。

静的キーワードの構文は次のとおりです。

static datatype variable_name = value; // Static variable
   static return_type function_name { // Static functions
   ...
}

ここで

データ型 − int、char、floatなどの変数のデータ型

変数名 −これはユーザーが指定した変数の名前です。

−変数を初期化するための任意の値。デフォルトではゼロです。

return_type −値を返す関数のデータ型。

function_name −関数の任意の名前。

以下は静的キーワードの例です。

#include <bits/stdc++.h>
using namespace std;
class Base {
   public : static int val;
   static int func(int a) {
      cout << "\nStatic member function is called";
      cout << "\nThe value of a : " << a;
   }
};
int Base::val=28;
int main() {
   Base b;
   Base::func(8);
   cout << "\nThe static variable value : " << b.val;
   return 0;
}

出力

Static member function is called
The value of a : 8
The static variable value : 28

上記のプログラムでは、静的変数が宣言されています。静的関数は、以下に示すようにクラスBaseで定義されています-

public : static int val;
static int func(int a) {
   cout << "\nStatic member function called";
   cout << "\nThe value of a : " << a;
}

クラスの後、main()の前に、静的変数は次のように初期化されます。

int Base::val=28;

main()関数では、Baseクラスのオブジェクトが作成され、静的変数が呼び出されます。静的関数も、Baseクラスのオブジェクトを使用せずに呼び出されます。

Base b;
Base::func(8);
cout << "\nThe static variable value : " << b.val;

  1. C ++の#defineとconstキーワードの違いは何ですか?

    #defineディレクティブはプリプロセッサディレクティブです。プリプロセッサは、コンパイラがマクロを認識する前に、これらのマクロを本体に置き換えます。これは、ソースコードの自動検索と置換と考えてください。 const変数宣言は、言語で実際の変数を宣言します。これは、実際の変数のように使用できます。アドレスを取得し、渡し、キャストし、変換します。 コンパイラの最適化がないと、さまざまなケースでこれらの両方に関連するメモリ割り当ての隠れたコストが発生します。しかし、適切に最適化すれば、それらはほぼ同じになります。また、プリプロセッサマクロにはスコープがありませんが、const値にはスコープがあ

  2. C ++のconstキーワードとは何ですか?

    const修飾子を使用して、変数を定数として宣言します。つまり、変数が初期化されると、値を変更することはできません。 constを使用すると、非常に大きなメリットがあります。たとえば、PIの値のような定数値がある場合、プログラムのどの部分もその値を変更したくないでしょう。したがって、それを定数として宣言する必要があります。 const修飾型で宣言されたオブジェクトは、コンパイラによって読み取り専用メモリに配置される場合があります。また、constオブジェクトのアドレスがプログラムに取り込まれない場合は、まったく格納されない場合があります。たとえば、 #include<iostream&