c++のprivateとstaticを利用して単一のモードを実現する


本質は、コンストラクション関数をprivate属性に設定し、レプリケーションコンストラクション関数と付与コンストラクション関数もprivate属性に設定することです.これにより、外部でオブジェクトを作成することはできません.この場合、private属性のコンストラクション関数を呼び出して必要なオブジェクトを生成するpublic関数:getHumanInterface()が必要です.また、このオブジェクトをstaticプロパティに設定し、staticプロパティに設定する目的は、staticプロパティのオブジェクトがグローバル変数領域に置かれていることです.そうすると、このgetHumanInterfaceを呼び出すたびに、同じ変数にアクセスし、必要な単一のモードを実現します.
/*********************** Human.h *******************************/
#include 

/*     static   :
* static         ,              
* static              ,           ,   
* static       ,            
*/

/*    ,      ,     ,    private  ,           */
class Human {
private:
	Human();

	//         ,                  private  ;
	Human(const Human& Source); //  (  )    
	const Human& operator=(const Human&); //       ;

public:
	static Human& getHumanInterface();  //static  ,     ,       
};


/****************************Human.cpp*****************************/
#include 
#include 
#include "human.h"

/*    (        )*/
Human::Human()
{
	std::cout << "call the Human() constructor" << std::endl;
}

/*      */
Human& Human::getHumanInterface()
{
	static Human onlyHuman;  //         
	return onlyHuman;
}


/*****************************main.cpp*******************************/
#include 
#include "human.h"

using namespace std;

/*    private static,      ,        ,          */
int main()
{
	Human& onlyMan = Human::getHumanInterface(); //    static  (         ),      ,
	//Human woman;  //      ,    ,       private  ,      
	//Human* woman = new Human; //      ,    ,       private  ,      
	//Human woman = onlyMan; //    ,    ,         private  ,      
	//Human woman = Human::getHumanInterface(); //    ,            ,
	                                            //        private  ,      
	return 0;
}

参考:C++private,staticおよびコンストラクション関数による単一例モードの実装