• ベストアンサー

特定のクラスだけで const 変数を有効にしたい

円周率のような “意味を持つ定数” を C++ では以下のようにするのをよく見かけます。 const double PI = 3.1415926; これを特定の 1 つのファイル内だけで有効にする方法はありませんか? 例えばあるクラス Hoge.cpp と Hoge.h のみで上記の PI を使う,というように。 Hoge.h をインクルードするファイルにおいては PI を無効にしたいのです。 C++ 超初心者につき,マヌケな質問をしているかもしれないですが,ご教授願えたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.4

こんな感じは如何でしょう? class Hoge {  enum {N = 3};  double x[N][N]; ...

k1220011_2005
質問者

お礼

回答くださり,ありがとうございます。

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

#1です。 今回のケースであれば、#3または#4の回答のように、Hogeクラスの非公開部で定義してやれば十分かと思います。 なお、扱いたい定数というのが、整数の場合とそれ以外の場合では、かなり事情が異なりますので、ご注意ください。

k1220011_2005
質問者

お礼

回答くださり,ありがとうございます。 > なお、扱いたい定数というのが、整数の場合とそれ以外の場合で 今後の勉強の道しるべになります。ありがとうございます。

回答No.3

#1の補足の例なら、これでも宜しいかと。 class Hoge {   static const int N = 3;   double x[N][N] public: //以下略 尚、staticにしてはいても実際にメモリ空間を消費することはありません。

k1220011_2005
質問者

お礼

回答くださり,ありがとうございます。 メンバ変数内で上述のような定義ができることを知り,勉強になりました。 便利そうな記述なので今後,使う機会をさぐっておきます。

  • sonetea
  • ベストアンサー率26% (9/34)
回答No.2

Hoge.cppの方で宣言してください。 他のファイルでもPIの宣言がある場合などを考慮すると namespace { const double PI = 3.1415926; } と記述するのが良いと思います。 無名名前空間というものです。

k1220011_2005
質問者

お礼

回答くださり,ありがとうございます。 名前空間について 20 分ほど本を読みました。 よい勉強になりました。今後の技術として蓄えておきます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

Hoge.hとHoge.cppにはどんな内容が記述されますか? また、PIはどのような使われ方をされますか?

k1220011_2005
質問者

お礼

補足をつけてみたら,欲しかった回答が得られました。 質問の仕方も勉強できてよかったです。ありがとうございました。

k1220011_2005
質問者

補足

質問では便宜上,変数 PI としましたが,PI でなく整数 N で以下のようなことをしたいと思っています。 例えば 3 つのファイル Hoge.h と Hoge.cpp と main.cpp があるとして… /**  * Hoge.h  */ const double N = 3; class Hoge {   double x[N][N] public:   返り値 1  関数 1 ( 引数 1 ) { 処理 1  }   返り値 2  関数 2 ( 引数 2 ) { 処理 2  } }; /**  * Hoge.cpp は省略(すべてヘッダファイル Hoge.h に書くとして)  */ /**  * main.cpp  */ #include "Hoge.h" int main() {    Hoge h;    return 0; } のような構成とします。 const 変数 N はクラス Hoge の中で配列の大きさを決めるためだけに使いたいのです。 他のファイルたとえば main.cpp に const 変数 N のスコープが及んでほしくないのです。 つたない説明ですが,補足させていただきます。

関連するQ&A