2015-10-28 64 views
1

我有一個父類:我可以創建單身兒童班嗎?

class ParentClass { 
public: 
    ~ParentClass(){} 
    static ParentClass &getInstance() { 
     static ParentClass instance; 
     return instance; 
    } 

    void methodA() { 
     //do some stuff 
    } 

    void methodB() { 
     //do some stuff 
     methodA(); 
     //do some stuff 
    } 

private: 
    ParentClass(){} 
} 

我想創建子類:

class ChildClass : public ParentClass { 
public: 
    ChildClass(){} 
    ~ChildClass(){} 

    methodA() { 
     //do some stuff 
    } 
} 

這段代碼有一些明顯的問題。首先我不能用這種方式創建ChildClass(父類的構造函數是私有的)。並且好像ChildClass不能直接從ParentClass繼承。這些類非常相似。我不想創建這些類的兩個類似副本。

也許我可以爲ParentClassChildClass創建一個基類。我不確定,但有一種方法可以從單身人士創建孩子嗎?

回答

1

辛格爾頓有一個明確的目標。它必須確保在當前環境中只存在給定類型的單個實例。

因此我沒有看到有任何理由讓methodAmethodB在裏面。尤其是沒有人可以創建ParentClass類型的對象,因此不能調用methodAmethodB(除非它們也變爲靜態)。 我想一個更好的OOD是隻用getInstance()方法創建單和單獨創建ParentClass其中將包含到由單身返回的對象的引用:

class SingletonClass { 
public: 
    ~SingletonClass(){} 
    static SingleInstanceClass &getInstance() { 
     static SingleInstanceClass instance; 
     return instance; 
    } 

private: 
    SingletonClass(){} 
} 

class ParentClass { 
public: 
    ParentClass(SingleInstanceClass& ref); 
    ~ParentClass(){} 

    virtual void methodA() { 
     //do some stuff 
    } 

    void methodB() { 
     //do some stuff 
     methodA(); 
     //do some stuff 
    } 

private: 
    SingleInstanceClass& singInstRef; 
} 

然後

class ChildClass : public ParentClass { 
public: 
    ChildClass(SingleInstanceClass& ref) : ParentClass (ref){} 
    ~ChildClass(){} 

    virtual void methodA() { 
     //do some stuff 
    } 
}