這一篇應該要在情人節發表才對!
前一篇寫得太複雜,已經做調整更新,並把friend class拆開,獨立寫在此
friend class會破壞物件的封裝特性,使用上要很小心,非必要不使用
前一篇的static constructor只能存取公開的(public)欄位或方法,但稍作調整,存取private或protected也沒問題
namespace MyNamespace
{
class MyClass
{
//MyClassStaticCons是MyClass的好碰友,
//在MyClassStaticCons面前MyClass毫無隱私可言,
//MyClass的一切都能給MyClassStaticCons存取沒問題
friend class MyClassStaticCons;
//(可以有多個好碰友)
private:
static int _staticVariable1;
static void Initialize()
{
_staticVariable1 = 10;
}
public:
static void DoSomething();
};
int MyClass::_staticVariable1 = 0; //少了這行編譯時會出現undefined reference錯誤
class MyClassStaticCons
{
struct Constructor
{
Constructor() //初始化MyClass
{
//視實務需要,初始化變數或物件,也能呼叫多道方法,不用是public
MyClass::Initialize();
}
};
const static Constructor Cons;
};
//程式啟動時,在進入main前,完成MyClass的建立和初始化
const struct MyClassStaticCons::Constructor MyClassStaticCons::Cons;
}