阻止虚拟继承
Blocking virtual inheritance
在现代c++中是否有一种方法可以防止类被虚拟继承,同时又允许常规继承?现在这对我来说似乎是不可能的,但是在这门语言中有太多的事情看起来是不可能的。
为继承基指定virtual
关键字的目的是防止它在继承层次结构中被实例化多次。因此,不能首先阻止this的使用(参见"什么是虚拟基类")。
我相信您可能已经混淆了您的可能性,如何控制实际上可以通过继承类被覆盖的内容。
如果你没有在你的类中声明virtual
方法,那么继承类就不能为该基的任何方法提供任何virtual
覆盖。
在语义上最好的表述是
class Foo {
public:
Foo() {}
protected:
~Foo() {} // Explicitly non virtual destructor, prevents virtual inheritance
// 'protected' forces inheritance to use this class
};
即使使用引入的纯抽象接口,这也应该工作得很好
struct IFace {
virtual void some_operation() = 0;
virtual ~IFace() {}
};
class Foo : public IFace {
public:
// Implementation of interface methods
virtual void some_operation() {
}
// Same as above. Possibility of virtual inheritance stops here
};
更新:
似乎@ dieterlvirtual
关键字进行继承,并且您似乎无法阻止它。
虽然您可以通过简单地将这些实现提供为私有来防止继承类来(重新)实现接口,但是:
class Foo : public IFace {
private:
// Implementation of interface methods
virtual void some_operation() {
}
};
相关文章:
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 大小虚拟继承中的派生类
- 删除C++继承中虚拟类成员的代码重复
- 重写虚拟函数和继承
- C++ 多级虚拟继承编译问题
- 如何正确获得虚拟继承?
- 编译时继承类中的隐式虚拟与显式虚拟
- 钻石继承虚拟成员铸造与指针
- CPP 继承虚拟方法解析顺序
- 关于C 接口(纯虚拟类)/多重继承/虚拟继承的设计Qustion
- 继承虚拟类C 的派生类
- 多个继承/虚拟函数
- 不能从具有虚拟继承(C++虚拟继承)的类派生
- C++多重继承+虚拟函数(-歧义)=怪异行为(也是函数指针)
- 为什么我不能继承虚拟基的构造函数?
- C++继承虚拟函数崩溃
- c++多重继承/虚拟继承
- 派生类的成员函数是否从基类继承虚拟性?
- 继承虚拟函数的类的boost::optional失败的原因
- c++继承虚拟函数