C / C ++でのstaticキーワードの基本的な使用法

****

静的キーワード

  • 1.メンバー変数を変更します
  • 2.メンバーメソッドの変更
  • 3.静的関数
  • 4.静的グローバル変数
  • 5.静的ローカル変数

1.メンバー変数を変更します

1)静的メンバー変数の初期化はクラスの外部に配置する必要があります
。2)静的メンバー変数はオブジェクトに属していませんが、クラス全体に属し、オブジェクト間で共有されます。各オブジェクトのメモリスペースを計算するとき、静的メンバー変数はカウントされません
。3)静的メンバー変数はクラス名を介してアクセスできます。

class A
{
    
    
public:
	A(int ab)
	{
    
    
		this->m_ab = ab;
	}

	static int m_aa;
	int m_ab;
};

int A::m_aa = 10;   //静态成员变量的初始化必须放在类外


int main()
{
    
    
	A a(10);
	A::m_aa += 10;   //可以通过类名访问静态成员变量
	a.m_ab++;
	cout << "aa: " << a.m_aa << "\tab: " << a.m_ab << endl;   //计算每个对象的内存空间时,不算上静态成员变量
	cout << "sizeof class A:  " << sizeof(A) << endl;
	
}

上記のコードを実行する必要があります
ここに画像の説明を挿入します

// 2.変更されたメンバーメソッド(関数)

1)静的メンバーは互いにアクセスできます。静的メンバー関数は静的データメンバーと静的メンバー関数にアクセスできます
。2)非静的メンバー関数は静的メンバー関数と静的データメンバーに任意にアクセスできます
。3)静的メンバー関数は非静的メンバー関数にアクセスできません。静的メンバー関数静的メンバー関数と非静的データメンバー;
4)静的メンバー関数を呼び出すには、メンバーアクセス演算子(。)と(->)を使用して、クラスオブジェクトまたはクラスへのポインターの静的メンバー関数を呼び出すことができます。オブジェクト、またはクラスを使用できますName ::関数名の呼び出し(元々はクラスに属しているため、クラス名で呼び出すのが通常です)
5)静的データメンバーと同様に、静的メンバー関数はクラス全体に属します。特定のオブジェクトではなく、すべてのクラスにサービスを提供します。特定のクラスの特定のオブジェクト用ではないため、このポインターは使用できません。

class A
{
    
    
	A(int b, char c)
	{
    
    
		this->m_b = b;
		this->m_c = c;
	}

	//3.静态成员函数不能访问非静态成员函数和非静态数据成员;
	static void GetVal(void)
	{
    
    
		cout << m_a << endl;
		//cout << m_c << endl;    //报错 :非静态成员引用必须与特定对象相对	
		//this->...                 //报错: this只能用于非静态函数内部
	}
	//2.非静态成员函数可以任意地访问静态成员函数和静态数据成员;
	void getval(void)
	{
    
    
		cout << "m_a: " << m_a << "\tm_b: " << m_b << "\tm_c: " << m_c << endl;
	}
private:
	static int m_a;
	int m_b;
	char m_c;
};

 int A::m_a = 100;      //对静态成员初始化


3.静的関数

static void Stringprintf(string str)   //用来表示不能被其它文件访问的函数
{
    
    
	cout << str << endl;
}

// 4。静的グローバル変数

static string name = "gentle";     //用来表示不能被其它文件访问的全局变量

5.静的ローカル変数

静的ローカル変数の「メモリ」とライフタイムの「グローバル」

//记忆性:两次函数调用时,在第二次调用进入时,能保持第一次调用退出时的值。
void stafunc()
{
    
    
	static int stanum = 0;  //只有第一次进入该函数才会初始化
	stanum++;
	cout << "stanum: " << stanum << endl;
		
}

void func()
{
    
    
	int num = 0;
	num++;
	cout << "num: " << num << endl;
}


int main()
{
    
    
	for (int i = 0;i < 10;i++)
	{
    
    
		stafunc();
		func();     //静态局部变量的函数和普通函数的对比
	}
	return 0;
}

示されているように、上記のコードの実行効果
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_50188452/article/details/110940196