前往
大廳
主題

C++的friend class

Yang | 2023-02-20 21:07:57 | 巴幣 0 | 人氣 231

這一篇應該要在情人節發表才對!

前一篇寫得太複雜,已經做調整更新,並把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;
}
送禮物贊助創作者 !
0
留言

創作回應

更多創作