У меня есть библиотека, которую можно скомпилировать как общую библиотеку (или DLL в Windows). У него есть класс, производный от другого класса в другой библиотеке. Базовый класс имеет несколько виртуальных методов, и мой класс переопределяет некоторые из них. Например:
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 для моего класса теперь будет содержать другое значение. Это правильно?
Я также совершенно уверен, что ни одно из приложений, в настоящее время использующих мою библиотеку, не использует этот метод, поскольку он полностью сломан и никогда не работает. Так что я не беспокоюсь о том, чтобы сломать существующие вызовы реализации базового метода. Я просто хочу убедиться, что больше ничего не сломаю.