如何用private 構造函數生成instance

static function in class can only access the static data member in the class.

private constructor is used to prevent creating instance directly through "new" or other class.

 類似於singleton

class privateTest {
public:
	int testvalue;
	static privateTest* creatIns(int value){
		return new privateTest(value);

	}
private:
	privateTest (int value){
		this->testvalue = value;
	}
};

調用的時候

privateTest* test2 = privateTest::creatIns(1);
privateTest* test1 = privateTest::creatIns(2);
這樣做的好處:通過一個靜態接口,外界只可以調用 所以還是封裝過的,因爲你可以修改接口 實現不同的constructor 繼承,多態


比如:一個簡單的例子,想規定全局只能有5個這種類的實例

解決辦法:在class里加一個static 的counter,構造和析構的時候修改這個值

class privateTest {
public:
	int testvalue;
	static int count;
	static privateTest* creatIns(int value){
		return new privateTest(value);
	}
private:
	privateTest (int value){
		count++;
		this->testvalue = value;
		
	}
};
注意一定要在mian函數外初始化:
int privateTest::count = 0;

類的靜態成員是該類所有實例的共用成員,也就是在該類的範疇內是個全局變量,也可以理解爲是一個名爲A::s_的全局變量,只不過它是帶有類安全屬性的;道理很簡單,因爲它是在程序初始化的時候分配的,所以只分配一次,所以就是共用的;

     類的靜態成員必須初始化,道理也是一樣的,因爲它是在程序初始化的時候分配的,所以必須有初始化,類中只是聲明,在cpp中才是初始化,你可以在初始化的代碼上放個斷點,在程序執行main的第一條語句之前就會先走到那;如果你的靜態成員是個類,那麼就會調用到它的構造函數








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