【總結】C++靜態成員函數及測試用例

1.靜態成員函數可以用普通函數指針儲存,普通成員函數必須用類函數指針儲存

class A
{
public:
	static void fun()
	{
		cout << "hello world" << endl;
	}
public:
	void fun2()
	{

	}
};
int main()
{
	void(*p)() = &A::fun;//用普通函數指針,正確
	void (*p1)() = &A::fun2;//用普通函數指針,錯誤
	void(A::*p2)() = &A::fun2;//正確,用類的函數指針
	void(A::*p3)() = &A::fun;//錯誤,靜態成員函數用類函數指針
}

2.靜態成員函數不可以調用非靜態成員函數原因有二,其一靜態成員函數優於非靜態成員函數生成,在編譯的時候靜態成員函數已經生成,其二靜態成員函數不含this指針

class A
{
public:
	static void fun()
	{
		cout << "hello world" << endl;
		fun2();//錯誤,靜態成員函數不能調用普通成員函數;
	}
public:
	void fun2()
	{
		fun();//正確,普通成員函數可以調用靜態成員函數
	}
};

3.靜態成員函數不可以同時聲明爲 virtual、const、volatile函數。

class A
{
public:
	static void fun()const//錯誤
	{
		cout << "hello world" << endl;
	}
	static virtual void fun2()//錯誤
	{

	}
	volatile static void fun3()//錯誤
	{

	}
public:
	void fun2()
	{

	}
};

4.在未創建任何對象時,靜態成員函數依舊可以調用

class A
{
public:
	static void fun()
	{
		cout << "hello world" << endl;
	}
public:
	void fun2()
	{

	}
};
int main()
{
	A::fun();//靜態成員函數儲存在數據段,當類還未實例化是依舊可以調用
	return 0;
}

如有不足,希望指正。

本文出自 “pawnsir的IT之路” 博客,請務必保留此出處http://10743407.blog.51cto.com/10733407/1749774

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章