2011-07-29 2 views
0

クラス内のデータメンバは、静的である場合に限りconstにできます。 それ以外の場合は、クラス内の定数を初期化するコンストラクタが必要です。非静的定数データメンバーをコーディング中にクラス内に宣言することは適切ですか?

can we declare a const data member inside a class? //this was an interview question 

プログラマがクラス内で定数を宣言することは可能ですが、それは適切です。

いくつかの説明/理由を教えてください。なぜ、できないのですか?

答えて

1

オフもちろん、あなたがすることができます:

struct A 
{ 
    A() : a(5) 
    { 
    } 
    const int a; 
}; 

int main() 
{ 
    A a; 
} 

これは、データ部材Aことを意味し、内部の構造体Aは変更するつもりはありません。

+0

が、それは良いプログラミングの練習がそうすることです(私が意味するいかなるがあります他のより良い方法)、またデータメンバーが私的なものである場合はどうなるでしょうか? – munish

+0

@munishこの型のオブジェクトの存続期間中にこのデータメンバを変更すべきでない場合は、自由にconstを宣言してください。 googleで "const correctness"を検索する –

1

短い回答:クラス内に非スタティックconstメンバーを置くことができます。

まだ値を割り当てる必要があるため、許可されている唯一の場所は初期化リストにあります。

あなたのメンバーが本当に不変であれば、それはいつもやるべき理由です。つまり、const-correctnessは、主にコーディングを助けるオプションのツールなので、必要に応じて使用してください。後で自分自身に感謝します。そして、もしあなたがそれを使わなければ...それは本当に問題ではありません!

1

クラスに使用するいくつかの定数があり、クラスに属しているかどうか確かめてください。

は、たとえば、あなたがユニークIDを持ついくつかのデータ型を持っていると言うことができ、IDはオブジェクトを識別し、そのためには、変更することはありません:

class myData { 
    cont int ID; 
    myData(int newID) : ID(newID) {} 
}