>抽象クラス=interface class(Java流の言い方)ですね。
必ずしもそうではありません。
抽象クラスというのは、一つでも純粋仮想関数を持つクラスのことです。
仮想関数は極力publicにしないで、
class A
{
virtual int do_func(int arg) = 0;
public:
int func(int arg) { return do_func(arg); }
};
のようにした方が何かと好都合です。
>ただ、先の返答にも書いているように、namespaceを利用してみたら、
>一応目的達成したようですが、
それがダメなことは、YuOさんが指摘済みですね。
>やはりinterface classのほうは普通ですね。
いや、Pimplイディオムの方が普通だと思いますよ。
こんな感じです。
// ↓ ここから
class A
{
struct Impl* pimpl_;
public:
A();
~A();
int func(int arg);
};
// ↑ ここまでを公開
struct Impl
{
int func(int arg) { ... }
};
A::A() : pimpl_(new Impl)
{
}
A::~A()
{
delete pimpl_;
}
int A::func(int arg)
{
return pimpl_->func(arg);
}
|