プロが教えるわが家の防犯対策術!

メンバ変数を隠蔽する方法を教えてください。

静的ライブラリをインクルードファイルとともに
配布しようとしております。

Q.通常、インクルードファイルを見れば、利用者に、
どのようなメンバ変数が使われているか知られて
しまいます。メンバ変数の存在そのものを隠蔽する
方法は無いでしょうか?

よろしくお願いいたします。

A 回答 (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();
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

確かこれでした。

create のおかげで、コンストラクタを露出させずに
new できる、ということでしょうか。

お礼日時:2004/12/07 12:16

「どうしても]と仰るなら、小賢しいですが:



--- 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(); }
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。

いわゆるラッパーでしょうか。

私の勘違いかもしれまんせが、
継承や仮想関数などを使って実現できたように
記憶しております。

すみませんが、もう暫く待ってみます。

お礼日時:2004/12/06 17:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!