2017-11-26 26 views
-1

別のクラスからクラスインスタンスを取得したいとします。別のクラスの属性と同じクラスインスタンスを取得する

私はクラスABオブジェクトをプライベートメンバーとして持つクラスを持っています。

class A 
{ 
    private: 
     B my_B; 

    public: 
     B getBInstance (void) 
     { 
     return this->my_B; 
     } 
} 

class B 
{ 
    private: 
     int my_attr; 

    public: 
     B() 
     { 
     this -> my_attr = 0; //Initial value for my_attr 
     }   

     void setMyAttr (int attr) 
     { 
     this->my_attr = attr; 
     } 

     int getMyAttr (void) 
     { 
     return this->my_attr; 
     } 
} 

私はmy_BクラスAからインスタンス化されたオブジェクトに対する排他的になりたいです。

次のような場合、BインスタンスにアクセスするたびにA::getBInstance()を呼び出すため、my_attrの内容を変更できません。

A new_A; 
new_A.getBInstance().setMyAttr(50); 
printf ("%d\n", new_A.getBInstance().getMyAttr()); //Prints 0 

しかし、私は次の操作を実行した場合、私は正しい出力を得る:答えはそれほど明らかである場合

A new_A; 
new_B = new_A.getBInstance(); 
new_B.setMyAttr (50); 
printf ("%d\n", newB.getMyAttr()); //Prints 50 

私は謝ります。静的なパターンやシングルトンのパターンを作成することについての努力は助けになると思いますが、この種の実装にはかなり新しいので、いくつか指導が必要です。事前に

おかげで、

+0

「排他的」とは何を意味していますか?これはシングルトンとは何が関係していますか? – StoryTeller

+0

この問題は例で説明されています。プライベートメンバークラスにアクセスする2つの方法は、異なる結果をもたらします。両方の方法で正しい結果を得ることができるようにしたい。シングルトンは1つのインスタンスを持つクラスであるため、私はその方向への実装が助けになると思っていましたが、私はそうは確かではありませんでした。 – mozcelikors

+2

あなたは 'my_B'のコピーを返します。 'A'に格納されているものを変更したい場合は、参照を返します。 – 1201ProgramAlarm

答えて

1

あなたはmy_Bのコピーを返します。 Aに保存されているものを変更する場合は、参照を返してください。

B &getBInstance (void) 
{ 
    return this->my_B; 
} 
関連する問題