ホームページ  >  記事  >  バックエンド開発  >  C++ クラスの静的データ メンバーと静的メンバー関数

C++ クラスの静的データ メンバーと静的メンバー関数

php是最好的语言
php是最好的语言オリジナル
2018-08-06 16:16:402852ブラウズ

静的データ メンバー

·キーワード 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 静的メンバーと定数メンバーの使用

C 重要なポイントの概要を確認する 5 静的メンバー変数とメンバー関数

以上がC++ クラスの静的データ メンバーと静的メンバー関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。