【发布时间】:2011-11-13 04:02:15
【问题描述】:
我有一个可以编译为共享库(或 Windows 中的 DLL)的库。它有一个派生自另一个库中的另一个类的类。基类有一些虚拟方法,我的类覆盖了其中的一些。例如:
class Base {
public:
virtual void method1();
virtual void method2();
virtual void method3();
};
class Derived: public Base {
public:
virtual void method2();
};
现在我发现其中一种虚拟方法不适用于我的班级。目前它没有覆盖这个方法,所以我也想覆盖它来修复它的行为:
class Derived: public Base {
public:
virtual void method2();
virtual void method3();
};
这会破坏与旧版本库的二进制兼容性吗?
据我了解,它与仅仅添加虚函数不同,因为 vtable 中虚方法的数量和顺序保持不变。唯一的区别是我的类的 vtable 中的特定条目现在将包含不同的值。这是正确的吗?
我也很确定当前使用我的库的应用程序都没有使用该方法,因为它已完全损坏并且永远无法工作。所以我不担心破坏对基本方法实现的现有调用。我只是想确保我不会破坏其他任何东西。
【问题讨论】:
-
从逻辑上讲,听起来应该没问题。但我不确定在 C++ 中保持二进制兼容性的确切规则。
标签: c++ overriding virtual binary-compatibility