- ベストアンサー
特定のクラスだけで const 変数を有効にしたい
円周率のような “意味を持つ定数” を C++ では以下のようにするのをよく見かけます。 const double PI = 3.1415926; これを特定の 1 つのファイル内だけで有効にする方法はありませんか? 例えばあるクラス Hoge.cpp と Hoge.h のみで上記の PI を使う,というように。 Hoge.h をインクルードするファイルにおいては PI を無効にしたいのです。 C++ 超初心者につき,マヌケな質問をしているかもしれないですが,ご教授願えたら幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じは如何でしょう? class Hoge { enum {N = 3}; double x[N][N]; ...
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
#1です。 今回のケースであれば、#3または#4の回答のように、Hogeクラスの非公開部で定義してやれば十分かと思います。 なお、扱いたい定数というのが、整数の場合とそれ以外の場合では、かなり事情が異なりますので、ご注意ください。
お礼
回答くださり,ありがとうございます。 > なお、扱いたい定数というのが、整数の場合とそれ以外の場合で 今後の勉強の道しるべになります。ありがとうございます。
- charmer29-2
- ベストアンサー率25% (41/159)
#1の補足の例なら、これでも宜しいかと。 class Hoge { static const int N = 3; double x[N][N] public: //以下略 尚、staticにしてはいても実際にメモリ空間を消費することはありません。
お礼
回答くださり,ありがとうございます。 メンバ変数内で上述のような定義ができることを知り,勉強になりました。 便利そうな記述なので今後,使う機会をさぐっておきます。
- sonetea
- ベストアンサー率26% (9/34)
Hoge.cppの方で宣言してください。 他のファイルでもPIの宣言がある場合などを考慮すると namespace { const double PI = 3.1415926; } と記述するのが良いと思います。 無名名前空間というものです。
お礼
回答くださり,ありがとうございます。 名前空間について 20 分ほど本を読みました。 よい勉強になりました。今後の技術として蓄えておきます。
- jacta
- ベストアンサー率26% (845/3158)
Hoge.hとHoge.cppにはどんな内容が記述されますか? また、PIはどのような使われ方をされますか?
お礼
補足をつけてみたら,欲しかった回答が得られました。 質問の仕方も勉強できてよかったです。ありがとうございました。
補足
質問では便宜上,変数 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 のスコープが及んでほしくないのです。 つたない説明ですが,補足させていただきます。
お礼
回答くださり,ありがとうございます。