1. 程式人生 > >C++:static成員變數、方法

C++:static成員變數、方法

static 修飾成員變數 和方法

static 修飾成員變數

不屬於物件私有 ,屬於物件共享 ,一定要在類外進行初始化。

#include<iostream>
using namespace std;

class Test
{
public:
	Test(int a, int b)
	{
	
		mb = b;
	}

	void Show()
	{
		cout << "ma:" << ma << endl;
		cout << "mb:" << mb << endl;
	}
	

private:

	static int ma;//屬於物件共享的,建構函式不能對其初始化
	int mb;
};

int Test::ma = 10;//靜態成員變數一定要在類外初始化

int main()
{
	Test test1(10, 20);
	test1.Show();
	
	return 0;
}

列印結果:

靜態成員變數的訪問:

#include<iostream>
using namespace std;

class Test
{
public:
	Test(int a, int b)
	{
		//ma = a;
		mb = b;
	}

	void Show()
	{
		cout << "ma:" << ma << endl;
		cout << "mb:" << mb << endl;
	}
	static int ma;
private:

	//static int ma;
	int mb;
};

int Test::ma = 10;

int main()
{
	Test test1(10, 20);
	test1.Show();
	Test::ma;//一般情況下作用域訪問
	test1.ma;//用物件來訪問 
	return 0;
}

列印結果:
   

解釋:Test::ma; //一般情況下用作用域訪問
           test1.ma; //用物件來訪問  
         普通的成員變數依賴於物件的訪問  靜態成員變數不依賴於物件的訪問.
         也就是說,普通的成員變數訪問必須有物件,而靜態成員變數的訪問,物件或有或無都可以對其進行訪問。

static 修飾成員方法

ststic成員方法:


        _cdecl呼叫約定,沒有this指標

普通成員方法:
       _thiscall呼叫約定,有this指標