说我有课:
class B;
class A{
public:
A();
virtual B foo();
}
在第三方组件中定义。我想包装A和B类,产生myA和myB。 现在,我不能从外部访问A类和B类,而是具有myA和myB相同的功能。可以从第三方模块调用foo()。
我更喜欢使用继承而不是封装。
所以有两个问题:
有关如何优雅地做到这一点的任何建议?我提出了一些解决方案,但我更喜欢对整个事情有一个全新的看法。
编辑:
只是一个理论问题。我实际上并不需要这样做,只想到可以实现的方法。
EDIT2:
myA2是一个扩展myA的类。在模式之前,它将被称为A2(一个从第三方模块扩展A类的类)。
答案 0 :(得分:2)
我不明白你为什么喜欢用继承而不是封装来做这件事。一般来说,扩展您正在包装的类是实现包装器模式的“错误”方式,尤其是因为您通常希望在该过程中重新定义接口。在类myA中,您将拥有一个包含A类实例的A类字段,myA中的哪些方法可以根据需要调用。除非我误解了你想要完成的任务,否则这是实现你想要的最优雅的方式。
答案 1 :(得分:0)
您应该能够类似地声明函数名称/参数。查看:
strange-inheritance部分:[23.9]是什么意思,警告:Derived::f(char)
隐藏Base::f(double)
?在第3个代码块上。
它还显示了调用基本方法的语法。