2016-05-29 11 views
-3

あるクラスの変数に別のクラスにアクセスして、ある値に設定したいとします。ここのコードのように、some_flagをのtrueに設定します。出来ますか?はいの場合、それを行う方法?システムアーキテクチャへC++で無関係の関数から変数にアクセスする

制約:

  1. 2つのクラスが継承できません。
  2. 2つのクラスは関連していません。
  3. secondClassFunction()の機能シグネチャは変更できません。

ここでコードスニペットです: -

#include <iostream> 
using namespace std; 

class FirstClass{ 
    bool some_flag; 
    public: 
     void setFlag(bool flag); 
     bool getFlag(); 
}; 

FirstClass::FirstClass(){ 
    some_flag(false); 
} 

class SecondClass{ 
    public: 
     void secondClassFunction(); 
} 

SecondClass::secondClassFunction(){ 
    // do something here. 

    // I want to access some_flag using SecondClass object. 
    // how to do this? 
} 

int main() { 
    SecondClass secObj; 
    secObj.secondClassFunction(); 
    return 0; 
} 

はクラスが助けラッパーのでしょうか?はいの場合、どうですか?

編集: -

制約4.クラスフレンド機能を作成できません。

制約事項5.フラグ変数をグローバル化できません。

詳細: -

flag

FirstClassのメンバーである関数に設定されています。 のメンバーであるこの機能をflagにリセットします。 2つのクラスは継承されず、システムアーキテクチャの制約のためにアクセス指定子を変更できません。

flagは、プロセッサがモバイルアプリケーションから特定のコマンドを受信したかどうかなど、アクティビティのステータスを示すために複数のタスクによって使用されるセマフォのようなものです。

+1

を呼び出す前に、適切かつ有効なインスタンスを持っていることを確認してください。 –

+3

@sleeptightpupperいいえ、「友人」はあなたの敵*です。適切なデザインはあなたの友人です。 –

+1

オブジェクトの 'some_flag'にアクセスしたいですか? –

答えて

0

FirstClassのインスタンスは気にしないようです。だから次のアプローチはあなたのために働くでしょう:

void SecondClass::secondClassFunction() 
{ 
    // Create local instance of the object to change 
    FirstClass first; 
    first.setFlag(true); 
} 

しかし、それはまったく意味がありません。変更するオブジェクトを知る必要があります。SecondClass::secondClassFunction() を呼び出す前に、コンテキストにFirstClasssome_flagとそのセッター静的

  • セットのインスタンスを作成し、静的なグローバルまたはシングルトンFirstClassのインスタンスを作成し、
  • それを修正

    • :私は3つのオプションをお勧めしたいです

      第三の選択肢は、次のように説明し

      class FirstClass; // Forward declaration 
      class SecondClass 
      { 
      ... 
          FirstClass* firstClassInstance; 
      ... 
          void setFirstClassInstanceToModify(FirstClass* first) 
          { 
           firstClassInstance = first; 
          } 
      ... 
      }; 
      
      void SecondClass::secondClassFunction() 
      { 
          firstClassInstance->setFlag(true); 
      } 
      

      そして、この

      FirstClass first; 
      ... 
      SecondClass second; 
      ... 
      second.setFirstClassInstanceToModify(&first); 
      second.secondClassFunction(); 
      

      のようにそれを呼び出すしかし、 `friend`はあなたの友達ですsecondClassFunction

  • 関連する問題