C++ 根据姐妹类自动实现虚拟函数
是否有一种习惯用法可以用来帮助实现依赖于基类存在的虚拟函数?例如,我有C++ 根据姐妹类自动实现虚拟函数,c++,c++11,multiple-inheritance,virtual-functions,C++,C++11,Multiple Inheritance,Virtual Functions,是否有一种习惯用法可以用来帮助实现依赖于基类存在的虚拟函数?例如,我有 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.*
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无关。您可以在A中完成这一切:
class A
{
public:
virtual B* getB() {return dynamic_cast<B*>(this);}
};
A类
{
公众:
虚拟B*getB(){return dynamic_cast(this);}
};
注意:
virtual
这里只是为了使类A具有多态性,这是使用dynamic\u cast
的一个要求。我们不打算覆盖getB()
您可以在一个:
class A
{
public:
virtual B* getB() {return dynamic_cast<B*>(this);}
};
A类
{
公众:
虚拟B*getB(){return dynamic_cast(this);}
};
注意:
virtual
这里只是为了使类A具有多态性,这是使用dynamic\u cast
的一个要求。我们不打算覆盖getB()
这是以什么方式实现的“这种使用动态\u cast
的要求?还是重写子类中的函数?C++11 5.2.7 Dynamic cast说“否则,v应该是指向多态类型的指针或左值”。这是“其他”情况之一。对于向下和交叉转换,源类型需要是多态的。getB()
如果A有其他虚拟函数,它本身不需要是虚拟的。谢谢你,但是5.2.7/5(而不是你引用的/6)不包括这种情况吗?不。那一段包括了向上转换。这是怎么回事“这种使用动态\u cast
的要求?还是重写子类中的函数?C++11 5.2.7 Dynamic cast说“否则,v应该是指向多态类型的指针或左值”。这是“其他”情况之一。对于向下和交叉转换,源类型需要是多态的。getB()
如果A有其他虚拟函数,则其本身不需要是虚拟的。谢谢,但是5.2.7/5(而不是您引用的/6)中不包括这种情况吗?不。该段涵盖了向上转换。