はじめに: この記事では、クラスやオブジェクトにおける静的クラスのメンバー、静的メンバー関数、静的メンバー変数の使い方、注意点などを紹介します。静的メンバーが意味をなすシナリオがいくつかあります。
1. コンセプト
static として宣言されたクラス メンバーはクラスの静的メンバーと呼ばれ、static によって変更されたメンバー変数は静的メンバー変数と呼ばれ、static によって変更されたメンバー関数は静的メンバー関数と呼ばれます。
2. 特徴
1. 静的メンバーはすべてのクラス オブジェクトで共有され、特定のオブジェクトに属しません。静的領域に格納される。
2. クラスの静的メンバーを使用类名::静态成员
または对象.静态成员
アクセスできます。
3.静的メンバー変数は、定義時に static キーワードを追加せずに、クラスの外部で定義する必要があります。、それは単なるクラス内の発言です。
4. 静的メンバー関数には、このポインターが隠されていません。非静的メンバーにはアクセスできません。
5. 静的メンバーは、public、private、およびprotect アクセス修飾子によっても制限されます。
静的メンバーがオブジェクトに存在しません
静的メンバーは、メンバー関数と同様、オブジェクト内に存在しません。
次のコードを例として取り上げます。
class A {
private:
static int _a; //静态成员变量
};
int A::_a = 1; // 在类外定义初始化,用类名访问。
int main()
{
cout << sizeof(A) << endl;
return 0;
}
コンソール出力:
クラスのメモリ計算は構造体アライメント ルールに従っていることがわかります。静的メンバーがオブジェクト内にある場合、出力結果は 4 になるはずですが、出力結果は 1 になります (1 はプレースホルダー)。これは、静的メンバーがオブジェクト内に存在せず、静的領域に存在することを意味します。
3. 静的メンバー変数はクラス外で初期化されます
これは重要なポイントであり、覚えておく必要があります。
class A {
private:
static int _a; //静态成员变量声明
//static int _a = 1 行不行???
};
int A::_a = 1; // 在类外初始化
上記のコードで、ブロガーが質問しました。静的メンバー関数を宣言するときにデフォルト値を指定しても問題ありませんか? 答えは「いいえ」です。宣言時のデフォルト値は実際にはコンストラクターの初期化リスト割り当てですが、静的メンバーは特定のオブジェクトに属していないためです。つまり、静的メンバー関数は初期化リストを通過しません。なので、デフォルト値を指定しても意味がありません。
4. 静的メンバー関数
通常のメンバー関数とは異なり、静的メンバー関数にはこのポインターがありません。
静的メンバー関数は非静的メンバー オブジェクトにアクセスできません(このポインタがないため)。
静的メンバー オブジェクトは、静的メンバー関数と一緒に使用されます。
class A {
public:
/*void print() // _a是静态成员变量,常规成员函数不能访问静态成员对象
{
cout << _a << endl;
}*/
static void print() //需要写成静态成员函数才行
{
cout << _a << endl;
}
private:
static int _a; //静态成员变量
};
int A::_a = 1; // 在类外初始化
int main()
{
A::print(); //类名::访问函数
return 0;
}
記事末尾BB: ご不明な点がございましたら、お気軽にコメント欄にメッセージを残してください。記載内容に誤りがある場合は、コメント欄でご指摘ください。ブロガーが作成します。見たらすぐに修正。最後に、作成するのは簡単ではありませんが、友人に役立つ場合は、ブロガーに「いいね」や注目を与えたいと思います。