C++特殊函數方法

特殊函數方法函數

  • 靜態方法(static)
  • const方法

 靜態方法:this

  • 靜態方法不屬於特定對象,所以沒有this指針。
  • 當用對象調用靜態方法時,靜態方法不會訪問該對象的非靜態數據成員。
  • 靜態方法能夠訪問private和protected靜態數據成員,並且一個對象能夠經過調用靜態方法訪問另外一個同類型對象的private和protected靜態數據成員。

const方法:編碼

  • 非const對象和const對象都可以調用const方法,但const對象僅能調用const方法。
  • 實際編碼時,不修改對象的全部方法聲明爲const,以便在程序中引用const對象。

靜態方法與const方法關係:指針

  • const和static不可能同時修飾同一個函數方法,由於靜態方法沒有類的實例,因此不可能改變內部的值,因此二者相結合實際是多餘的。

固然,若是類的成員函數不會改變對象的狀態,那麼該成員函數會被聲明爲const,但有時候須要在const函數中修改一些與類的狀態無關的數據成員,那麼該數據成員就應該被mutable修飾,如計算運算次數,運行效率等等。code

2.舉例對象

class test
{
public:
	static int getNumber();
	string getString()const;
	int setNumber(int x);
	static int getAnotherNumber(test anothertest);
private:
	static int n;
	string s;
};
int test::n = 0;
int test::getNumber()
{
	//return this->n;//this只能用於非靜態成員函數內部
	//string s1 = s;//靜態成員函數僅能訪問靜態數據成員
	return n;//訪問private成員變量
}
int test::setNumber(int x)
{
	this->n = x;
	return this->n;
}
string test::getString()const
{
	return s;
}
int test::getAnotherNumber(test anothertest)
{
	return anothertest.n;
}
void main()
{
	test onetest, twotest;
	onetest.setNumber(8);
	twotest.setNumber(9);
	cout << onetest.getAnotherNumber(twotest)<<endl;//個對象能夠經過調用靜態方法訪問另外一個同類型對象的private和protected靜態數據成員。
	const test threetest;
	cout<<threetest.getNumber()<<"\n";
	//cout << threetest.setNumber(5);//常量對象僅能調用const方法
	getchar();
}
相關文章
相關標籤/搜索