gpt4 book ai didi

c++ - 阻止虚拟继承

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:11 25 4
gpt4 key购买 nike

在现代 C++ 中是否有一种方法可以防止类被虚拟继承,同时允许常规继承?现在对我来说这似乎是不可能的,但这种语言中有太多似乎不可能的东西。

最佳答案

为继承基指定的 virtual 关键字的目的是防止它在继承层次结构中多次实例化。所以首先不能阻止使用它(另见 'What is a virtual base class' )。
我相信您可能对如何通过继承类来控制实际可以覆盖的内容感到困惑。

如果您没有在您的类中声明virtual 方法,则继承类无法为来自该基类的任何方法提供任何virtual 覆盖。
最好首先从语义上说明这一点是

class Foo {
public:
Foo() {}
protected:
~Foo() {} // Explicitly non virtual destructor, prevents virtual inheritance
// 'protected' forces inheritance to use this class
};

即使使用引入的纯抽象接口(interface),这也能很好地工作

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
};

更新:
似乎 @DieterLücking的评论和您的在线代码示例反驳了我所说的。这显然并没有停止在第一位使用 virtual 关键字进行继承,而且您似乎无能为力。

虽然您可以简单地通过将这些实现提供为私有(private)来阻止继承类来(重新)实现接口(interface):

class Foo : public IFace {
private:
// Implementation of interface methods
virtual void some_operation() {
}
};

关于c++ - 阻止虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24335662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com