1

私はC++言語にかなり慣れていません。Qt と一緒に使用して、クロスプラットフォームのユーザー インターフェイスを作成しています。ユーザー インターフェイスには、同じデータを使用してさまざまなグラフやプロットが表示されます。したがって、他のすべてのクラスからアクセスできるクラス (Data_Class) にデータを格納したいと考えています。データ クラスでは、プライベートな静的変数とパブリックな静的メソッド (get/set) を使用しています。

私には明確でないのは、他のクラスからデータ クラスにアクセスする方法です。つまり、Class_A に (Data_Class に) 書き込んだ後、Class_B で (Data_Class から) データ値を取得する方法です。

4

2 に答える 2

3

これが構文指向の質問であると仮定すると、次のようになります。

class Data_Class {
public:
    static int a;
    static int GetA() const { return a; }
}

ClassA

Data_Class::a;
Data_Class::GetA();

たとえば、Data_Class 静的メンバー定義を次のように追加することを忘れないでくださいdataclass.cpp

static int Data_Class::a = 0;

そうしないと、undefined referenceリンカーエラーが発生します。


新しい静的メンバー定義の追加を処理するAubinが提案したように、シングルトンパターンの使用を検討することもできます(コメントによると、シングルトンは悪い考えであり、可能であれば避ける必要があります) 。

class Data_Class {
private:
    Data_Class();  // Prevents multiple instances

    int a;
    int b;

public:
    // Will initialize instance if needed
    static Data_Class &GetInstance(){
       static Data_Class instance;
       return instance;
    }


    int GetA() const {return a;}
};

使用法:

Data_Class::GetInstance().GetA()

または、ウィキによると、もう少し複雑ですが、より柔軟な依存性注入を使用します。

依存性注入は、コンパイル時ではなく実行時にコンポーネントを選択できるようにするソフトウェアデザインパターンです。これは、たとえば、プラグインを動的にロードしたり、テスト環境でモックオブジェクトを選択したり、本番環境で実際のオブジェクトを選択したりするための簡単な方法として使用できます。このソフトウェアデザインパターンは、宛先の要件を知ることにより、依存要素(オブジェクトや値など)を宛先に自動的に挿入します。

于 2012-10-28T19:01:07.143 に答える
1

これらの2つのクラス宣言を考えると:

class A {
   public:
      static int get_data();
};

class B {
   public:
      static void do_something();
};

次のように、BからAのメソッドにアクセスできます。

void B::do_something()
{
     int the_data = A::get_data();
     // now do whatever you need to do with that data
};
于 2012-10-28T18:57:45.540 に答える