1

これは悪いコーディング方法のように思えますが、私に与えられたガイドラインでした。これが実際にメインでどのように実装されるかはわかりません。クラスを書いているだけです。

class Example
{
  private:
     static int total;
  public:
    void initalizeTotal();
}

Example::initalizeTotal()
{
   total = 0;
}

total は、そのクラスのオブジェクトの数をカウントするために使用されます。これは基本的に私が得ているものです。問題は、関数を実際に呼び出す方法を理解する方法です。毎回合計をリセットするという意味で、コンストラクターで呼び出すことはできません。そして、変数にまだ値があるかどうかを「チェック」しようとして失敗しました。ない場合は、関数を呼び出します。

誰でもできるアドバイスはありますか?

編集:合計が静的であることを含めるのを忘れていました。そして、合計を初期化する関数が必要です。それが課題の要件です。

4

4 に答える 4

5

totalすべてのオブジェクトで同じ変数にする必要があるため、次のようにする必要がありますstatic

class Example {
    private:
        static int total;
}

静的変数を初期化するには、次の行を .cpp ファイルに配置できます。

int Example::total = 0;

この初期化を行うために関数を呼び出す必要はありません。

于 2013-02-02T22:17:31.337 に答える
2

total変数を静的にすることができます:

class Example
{
  private:
     void addObject();
  public:
     static int total;
     Example();
}

Example::Example()
{
   addObject();
}

void Example::addObject()
{
   total++;
}

特定のオブジェクトに属さないようにします。次に、コンストラクターで呼び出されるメソッドの値を増やすとaddObject()、オブジェクト数が取得されます。

それにアクセスするには、Exampleオブジェクトを使用しませんが、代わりに次のように使用できます。

std::cout << "Objects count:" << Example::total;

初期化する場合は、コードのどこかで同じ方法で行います。

Example::total = 0;
于 2013-02-02T22:13:50.723 に答える
2

type の作成されたすべてのオブジェクトと共有するには、'total'フィールドを変数として使用する必要があります。そして、新しいオブジェクトをインスタンス化するたびに、フィールドが増加します。この助けを願っていますstaticExampletotal

于 2013-02-02T22:17:41.847 に答える
1

次のことを試してください。

#include <iostream>

class Example {
   static int total;

   public:
     Example() { total++; }
     static int getTotal() { return total; }
};

int Example::total = 0;

int main() {
    Example a, b, c, d;

    std::cout << Example::getTotal(); // 4
}
于 2013-02-02T22:18:24.653 に答える