1. 程式人生 > >關於類中靜態成員函數和靜態成員變量的知識點

關於類中靜態成員函數和靜態成員變量的知識點

out 所有 bubuko his 其他 結果 png ati 關於

類中的靜態成員函數:

1.函數的行為對所有派生類都一致時,可以聲明為靜態。

2.因為靜態成員函數只跟類有關跟類的實例無關,因此它不需要this指針

3.靜態成員函數由於是不與任何對象相關聯的,所以是沒有this指針的。從這裏也可以知道靜態成員函數無法訪問屬於類對象的非靜態數據成員,也無法訪問非靜態成員函數,它只能調用其他的靜態成員函數。即靜態成員函數不能訪問非靜態成員(非靜態成員函數或者非靜態成員變量),但是非靜態成員可以直接訪問靜態成員。

例子:

#include<iostream>
using namespace std;
class MyClass
{
public:
	MyClass(int a, int b, int c);
	static  void func();
	void printf()
	{
		cout << sum << endl;
	}
private:
	int a, b, c;
	static int sum;//靜態成員變量的聲明
};
int MyClass::sum = 0;//靜態成員變量必須在類外定義和初始化
MyClass::MyClass(int a, int b, int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
	sum += a + b + c;
}
void MyClass::func()
{
	cout << sum << endl;
}
int main()
{
	MyClass A(1, 2, 3);
	A.func();
	A.printf();
	MyClass B(4, 5, 6);
	B.func();
	B.printf();
	//MyClass::printf();//錯誤,非靜態成員函數必須與特定對象相對
	MyClass::func();//靜態成員函數是類中的所有對象共享的,並不但屬於特定對象
	return 0;
}

  運行結果:

技術分享圖片

類中的靜態成員變量:

1.靜態成員變量是整個類的實例共享的

2.靜態成員變量存儲在靜態存儲區/全局存儲局,而非靜態成員變量需要實例化才會分配內存。

3.靜態成員變量只能在類內聲明在類外定義和初始化。

為什麽靜態成員變量不能在類內定義?

答:為了防止重復定義,靜態成員變量是類的所有實例共享的,只需要定義一次就可以,如果在類內定義則每實例化一次類都會重新定義一次靜態成員變量,這會產生重復定義。

靜態成員不能訪問非靜態成員,非靜態成員可以直接訪問類中的靜態成員。

關於類中靜態成員函數和靜態成員變量的知識點