我正在编写一个需要创建复杂对象(D)的C ++库,但是向我的库用户返回一个指向简化对象(B)的指针(隐藏复杂对象的许多方法)。我决定通过返回一个指向简化基类(B)的指针,并将我的所有复杂功能添加到派生类(D)来实现它,如下所示:
class B {
virtual void simple() = 0;
}
class D : public B {
void simple() { cout << "visible simple stuff" ; }
void complex() { cout << "invisible complex stuff" ; }
}
在内部我创建了我的对象D,但是我返回一个向上指针,如下所示:
D Derived;
B *Bptr = &Derived;
return Bptr;
关于问题#1:是的,如果您提供工厂方法以及“简单”界面:
class B {
public:
static B * create();
virtual void simple() = 0;
};
inD Vs实现文件(c ++):
B *B::create()
{
return new D(); //or whatever 'hidden' implementation
}
关于你的#2:隐藏功能首先意味着简化,旨在帮助图书馆用户,而不是惩罚性约束。因此,完全隐藏D类并让(好)用户满意。