3

ヘッダーファイルにクラスがあります:

class Employee
    {
        //Private data members
    private:
        string firstName;
        string lastName;
        char gender;

        //number of employees
        const static int numEmployees = 0;

    public: 
    ....
    };

愚かなことは、クラスのプライベートメンバーで numEmployees を 0 の静的整数値として宣言するというインストラクターの「ガイドライン」にあります

numEmployees問題は、変数が であるため、変数を更新できないconstことです。たとえば、パブリックでコンストラクターを宣言する場合: .. 増やすことはできませんnumEmployees = numEmployees + 1

numEmployeesas として宣言しない場合はconststatic int numEmployees;Visual Studio 2010constで、クラスでのみ宣言されるというエラーが発生します。

宣言する方法はありnumEmployeesますか?ありがとうございました!

4

4 に答える 4

6

変更されるのでnumEmployees、変更しないでくださいconst。非定数静的変数は、クラス宣言の外部で、たとえばソースファイルで次のように初期化する必要があります。

int Employee::numEmployees = 0;

そうは言ってもnumEmployees、クラスのメンバーになることEmployeeはおそらく最善の考えではありません。

そして、私はgender文字ではなく列挙型を作成します。

于 2012-05-20T08:33:11.520 に答える
2

C++ では、静的変数はクラス宣言で宣言する必要がありますが、実装モジュールでも定義する必要があります。

// --- .h interface file
class MyClass
{
    public:
        static int my_static_variable;
    ...
};

// --- .cpp implementation file
#include "myclass.h"
int MyClass::my_static_variable = 0;

この制限について実際の技術的な議論はありませんが、それは言語がどのように定義されているかです。

何らかの理由で本当に回避する必要がある場合は、関数レベルの静的を使用できます。

class MyClass
{
    public:
        // Note: returning a reference to int!
        static int& my_static_variable()
        {
            static int n = 0;
            return n;
        }
};

ただし、変数にアクセスするには、この場合、メソッドを正式に呼び出す必要があります。

MyClass::my_static_variable() = 0;
MyClass::my_static_variable() ++;
MyClass::my_static_variable() *= 2;

「正式に」と言ったのは、インラインで宣言されたこのような単純な関数の場合、まともなコンパイラによって生成されたマシンコードは、変数だけを処理するために必要なコードと同じになるためです。

于 2012-05-20T08:45:53.453 に答える
1

numEmployeesクラス外で 初期化する

Employee::numEmployees = 0

publicクラスのメンバーとして宣言します

static int numEmployees;

private静的メンバーにはデフォルトでゼロが割り当てられるため、初期化せずに宣言することもできます。

于 2012-05-20T08:30:21.973 に答える
1

として宣言しましたconst。const パラメータをどのように変更できますか?

したがって、それを静的にして、コンストラクターで必要な値に初期化できます。デフォルトでは、静的変数はゼロに初期化されます。

于 2012-05-20T08:32:12.343 に答える