我是否可以使用成语来帮助实现依赖于基类存在的虚函数?例如,我有
class B {/* some abstract interface. */};
class A
{
public:
virtual B* getB() {return nullptr;}
};
class C : public A, public B
{
public:
B* getB() override {return this;}
/* Implement B's interface here.*/
};
我通常想要像这样实现getB
- 我可以以某种方式避免为所有叶子类重复这个吗?我可能有一些接口类,如B,
我知道一种方法是在C和B中实际上从A继承,但是如果可能的话,我想保持B与A不相关。
答案 0 :(得分:4)
您可以在A:
中完成所有操作class A
{
public:
virtual B* getB() {return dynamic_cast<B*>(this);}
};
注意:virtual
这里只是为了使A类具有多态性,这是使用dynamic_cast
的要求。我们不打算覆盖getB()
。