ホームページ >バックエンド開発 >C#.Net チュートリアル >C++ クラスの静的データ メンバーと静的メンバー関数
·キーワード static で宣言
·宣言されたクラスのデータ メンバーが静的である場合、関係なく作成される数 クラス オブジェクトごとに静的メンバーのコピーが 1 つだけあります。
·クラスのすべてのオブジェクト間で共有され、静的な有効期間が設定されます。
·他に初期化ステートメントがない場合、最初のメンバーは Object の後に作成され、すべての静的データ メンバーはゼロに初期化されます。
·クラスの外で定義および初期化されます。範囲解決演算子 (::) を使用して、属するクラスを示します
例 :
#include <iostream> using namespace std; class Box { public: static int count; //若该静态数据成员在private部分声明,则只能通过静态成员函数处理 Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout << "One constructor was called." << endl; length = l, width = b, height = h; count++; //每创建一个对象时加1 } double Volume() { return length * width * height; } ~Box() { count--; } private: double length, width, height; }; //初始化类Box的静态成员 int Box::count = 0; int main(void) { Box Box1(3.3, 1.2, 1.5); Box Box2(8.5, 6.0, 2.0); cout << "Total objects: " << Box::count << endl; //输出对象的总数 return 0; }
メンバー関数を静的として宣言すると、関数をクラスの特定のオブジェクトから分離できます
·クラス オブジェクトが存在しない場合にも呼び出すことができます。アクセスするには、クラス名と範囲解決演算子 :: を使用します。
·静的メンバー関数静的メンバー データ、他の静的メンバー関数、およびクラス外の他の関数にのみアクセスできます
·静的メンバー関数にはクラス スコープがあり、クラスの this ポインターにはアクセスできません。静的メンバー関数を使用して、クラスの一部のオブジェクトは Create
です。静的メンバー関数を使用して非静的メンバーにアクセスするには、オブジェクト
#例: を渡す必要があります。
#include <iostream> using namespace std; class Box { public: static int count; Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout <<"One constructor was called." << endl; length = l, width = b, height = h; count++; } double Volume() { return length * width * height; } static int getCount() { //静态成员函数 return count; } private: double length, width, height; }; int Box::count = 0; int main(void) { //在创建对象之前输出对象的总数 cout << "Inital Stage Count: " << Box::getCount() << endl; Box Box1(3.3, 1.2, 1.5); Box Box2(8.5, 6.0, 2.0); //在创建对象之后输出对象的总数 cout << "Final Stage Count: " << Box::getCount() << endl; return 0; }
注:
静的メンバー関数と通常のメンバー関数の違い:
静的メンバー関数には、このポインタは静的メンバー (静的メンバー変数と静的メンバー関数を含む) のみにアクセスできます。
通常のメンバー関数はこのポインターを持ち、クラス内の任意のメンバーにアクセスできますが、静的メンバー関数は静的メンバー関数にのみアクセスできます。このポインタはありません
静的メンバーを使用してコンストラクターとデストラクターの呼び出しを理解する
#include <iostream> using namespace std; class A { friend class B; //类B是类A的友元 public: static int value; static int num; A(int x, int y) { xp = x, yp = y; value++; cout << "调用构造:" << value << endl; } void displayA() { cout << xp << "," << yp << endl; } ~A() { num++; cout << "调用析构:" << num << endl; } private: int xp, yp; }; class B { public: B(int x1, int x2) : mpt1(x1 + 2, x2 - 2), mpt2(x1, x2) { cout << "调用构造\n"; //mpt是类A的对象,有几个mpt,有关类A的操作便执行几次 } void set(int m, int n); void displayB(); ~B() { cout << "调用析构\n"; //析构函数在类结束前调用,类结束的时候释放类申请的空间 } private: A mpt1, mpt2; //将A类的对象声明为B类的私有数据成员 }; int A::value = 0; int A::num = 0; void B::set(int m, int n) { mpt1.xp = m * 2, mpt1.yp = n / 2; } void B::displayB() { mpt1.displayA(); } int main() { B p(10, 20); cout << "Hello world!" << endl; B displayB(); //通过友元,使类B输出类A的私有数据成员 return 0; }関連記事:
C 重要なポイントの概要を確認する 5 静的メンバー変数とメンバー関数
以上がC++ クラスの静的データ メンバーと静的メンバー関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。