• ベストアンサー

メンバ変数の隠蔽

メンバ変数を隠蔽する方法を教えてください。 静的ライブラリをインクルードファイルとともに 配布しようとしております。 Q.通常、インクルードファイルを見れば、利用者に、 どのようなメンバ変数が使われているか知られて しまいます。メンバ変数の存在そのものを隠蔽する 方法は無いでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

> 継承や仮想関数などを使って実現できたように > 記憶しております。 できますよ。使う側が変則的になりますが: --- foo.h --- class Foo { public:   virtual ~Foo() {}   virtual void f() =0;   virtual int g() =0;   static Foo* create(); }; --- foo.cpp --- #include "foo.h" class FooImpl : public Foo { public:   virtual void f() { 処理 }   virutal int g() { 処理 } }; Foo* Foo::create() {   return new FooImpl(); }

hhgoohh
質問者

お礼

ありがとうございます。 確かこれでした。 create のおかげで、コンストラクタを露出させずに new できる、ということでしょうか。

その他の回答 (1)

回答No.1

「どうしても]と仰るなら、小賢しいですが: --- foo.h --- class FooImpl; class Foo {  FooImpl* impl_; public:  Foo();  ~Foo();  void f();  int g(); }; --- foo.cpp --- #include "foo.h" class FooImpl { public:  void f() { 処理の実体 }  int g() { 処理の実体 } }; Foo::Foo() { impl_ = new FooImpl(); } Foo::~Foo() { delete impl_; } void Foo::f() { impl_->f(); } int Foo::g() { return impl_->g(); }

hhgoohh
質問者

お礼

早速の回答、ありがとうございます。 いわゆるラッパーでしょうか。 私の勘違いかもしれまんせが、 継承や仮想関数などを使って実現できたように 記憶しております。 すみませんが、もう暫く待ってみます。

関連するQ&A

  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

  • クラス内のメンバ変数について

    クラス内のメンバ変数について Javaで作成したクラスのメンバ変数なのですが、クラス内のメンバ変数名の 一覧を取得する方法を探しています。 昔、仕事でやったような気がするのですが、忘れていました。 やりたいことは、メンバ変数のString型のメンバにtrimを行いたいのですが、 一つずつ名称を指定したくなく、どのクラスでも共通処理を行いたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • function内でメンバー変数を作れる?

    ActionScriptのオブジェクトスクリプトは初めてで、ActionScript2.0で制作しようとしています。 クラス内での変数の扱い方が解らずはまっています。 class Sample{ var temp:Array = Array(); function Func_01(key, val){ this.temp[key] = val; } 上の二行目メンバー変数tempを定義する部分をFunc_01内で行うことはできないのでしょうか? やりたいことは、外部テキストファイルを読み込み、中身によって持つメンバー変数を変えたいだけです。例えば 外部テキストより sample=key_A>>>1,key_B>>>2,key_C>>>3,key_D>>>4 を読み込み sample['key_A']=1; sample['key_B']=2; sample['key_C']=3; sample['key_D']=4; のように','と'>>>'でsplit等を利用し連想配列にして利用したいのですが、function内で読み込んだ値をメンバー変数にできずはまっています。お解りの方ご教授願います。

    • ベストアンサー
    • Flash
  • メンバー変数のアクセス法

    AppWizardを使ってできたCAbcWiewのメンバー変数(xyz)に対して,CAbcDoc.cppからアクセスする方法を教えてください。現在はxyzをグローバル変数にしています。

  • メンバ変数のサイズを条件に使いたいのですが

    vectorコンテナの中の構造体のメンバ変数のサイズをfor文の条件に使いたいのですが、プログラム実行中にエラーが出てしまいます。 いろいろいじって試してみたのですが、どうしてもわかりませんでした。 コンパイルエラーは出ませんでしたが、こういう事はできないのでしょうか? どなたか助けてください。お願いします。 #include <iostream> #include <string> #include <vector> using namespace std; struct kouzoutai { vector<string> koumoku; }; int main(){ vector<kouzoutai> vec; vec[0].koumoku[0] = string("aiueo"); vec[0].koumoku[1] = string("kakiku"); for (vector<string>::size_type i=0; i != vec[0].koumoku.size() ; i++){} }

  • クラスの継承でメンバ変数が・・

    初めてクラスの継承をしている者です。 親クラスA のメンバ変数らを 親クラスAからの処理で呼び出した 子クラスB で変更したいのですが、 子クラスB内ではちゃんと処理で数値が変化するのですが、 親クラスAに戻ると数値が全て初期値に戻ってしまいます。 継承方法は単に public 親クラスA と記述しているだけで、 親クラスAと子クラスBは別々のファイルに1クラスずつで記述しています。 コンパイルは警告もエラーも出ず動きます。 子クラスから親クラスのメンバ変数を変更するにはどうすれば良いのでしょうか?

  • 文字列のメンバ変数を外部変数のように扱いたい

    済みません。質問なのですが、 メンバ変数を外部変数のように扱うにはどうしたらよいのでしょうか? int型などの場合、 class test{ static const int a; }; const int test::a = 10; とすればよいですよね? これをcharの配列にして class test{ static char a[7][32]; }; char test::a[0] = "test"; とすると サイズが0の配列を割り当てまたは宣言しようとしました というコンパイルエラーがでてしまいます…。 多次元配列の場合はstatic変数としてもてないのでしょうか? char** として宣言してもどこでnewを行えばよいか解りません。 コンストラクタの中で行えば そこでstaticではなくなってしまいますし…。 後、できればstringクラスの配列で持ちたいのですが #include <string> class test{ static string test[7]; }; string test::test[0] = "aaa"; なんてことができますでしょうか? 質問内容が解りにくいかも知れませんが どうか教えてください。 宜しくお願いいたします。

  • privateのメンバ変数を直接取得するユーティリティ。

    privateのメンバ変数を直接取得するユーティリティ。 以前、あるプロジェクトでクラスのprivateメンバ変数をgetterメソッドがないのに直接取得できるクラスを使っているのを見ました。 オブジェクトとメンバ変数とかを引数に渡すと、Object型で返却されるようなテスト用のユーティリティクラスみたいでした。 クラスやパッケージなどを確認しなかったので、もしかしたらそのプロジェクトで独自に作ったのかもしれません。 ただオープンソースとかで存在するのであればテストに便利なので利用したいと考えています。 できればsetterメソッドがないprivateメンバ変数に設定できるクラスがあるとよいのですが・・・。 ご存知でしたら是非おしえてください。 希望している経緯はWebアプリケーションのクラスを作成すると、コンテナのオブジェクトがないと動かない場合も多く、単体試験がやりにくいのです。 easymockなど色々ありますが、生成したオブジェクトを対象クラスに渡してあげる必要があるものが多く(staticメソッドは対象外とか)、テストのためにsetterメソッドを実装する必要があります。 個人的には単体試験をやりやすくするために、本番では使用しないメソッドになるけれど、上記のようなsetterメソッドを作成するのはよいと考えています。 依存性を少なくさせて(意味が違うかもしれませんが)、試験がしやすくなれば保守性もあがるし、バグの発生率も少なくなると思っています。 ただ人によっては本番で動かないメソッドがあるのはおかしいという人もいます(実際に言われました)。 確かにそういう考えもあるかと思いますし、以前は私もそう思っていました。 試験のためのメソッドをクラスに作成する考えについても(主にテスト用なのでprotectedで作成しています)、やめた方がいいなどのアドバイスを頂けると嬉しいです。

    • ベストアンサー
    • Java
  • ダイアログから、ドキュメントのメンバ変数に設定するには

    MFCで現在 View-Documentの存在を知った程度の知識でプログラムを書いています。 MDI?形式でドキュメントにstrというCString型のメンバ変数を持たせています。 ViewからはGetDocumentで簡単にアクセスできますが、自作したダイアログボックス(例えばAbortのようなもの)の中にエディトボックスがあり、ここに入力された内容をドキュメントのメンバ変数strに代入したいのですが、どうすればよいのか分からず困っています。 あと、SDIやダイアログ形式でも同じように自作したダイアログのエディトボックスに入力した内容を設定したいです。 VBのInputBoxのようなことをしようとしていると想像してください。

  • pdfファイルをメンバーのみに閲覧するには!!

    pdfファイルをメンバーのみに閲覧するには!! インターネットにおいて、phpによるログインシステムを利用したメンバー用サイトを制作中です。 本サイトにおいて、メンバーのみに、pdfファイルを閲覧できるようにしたいと考えておりますが、pdfファイルへのURLにより、メンバー外の方も閲覧可能となってしまいます。 メンバーのみへ閲覧可能とし、メンバー外の方には、閲覧できないようにする方法はありますでしょうか? pdfファイルの存在するディレクトリへベーシック認証を設定すれば可能と思いますが、ログインシステムを利用して一回サイトに入ってきていますので、ベーシック認証による再度のユーザID、パスワード入力は、手数を増やしますので、できるだけこの方法は避けたいと考えています。アドバイスをいただけますよう、よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう