共有ライブラリ(またはWindowsのDLL)としてコンパイルできるライブラリがあります。別のライブラリの別のクラスから派生したクラスがあります。基本クラスにはいくつかの仮想メソッドがあり、私のクラスはそれらのいくつかをオーバーライドします。例えば:
class Base {
public:
virtual void method1();
virtual void method2();
virtual void method3();
};
class Derived: public Base {
public:
virtual void method2();
};
ここで、仮想メソッドの1つが私のクラスでは完全に機能しないことがわかりました。現在、このメソッドをオーバーライドしていないので、動作を修正するためにもオーバーライドしたいと思います。
class Derived: public Base {
public:
virtual void method2();
virtual void method3();
};
これにより、古いバージョンのライブラリとのバイナリ互換性が失われますか?
私が理解している限りでは、vtable内の仮想メソッドの数と順序は同じままであるため、仮想関数を追加するだけではありません。唯一の違いは、クラスのvtableの特定のエントリに異なる値が含まれるようになることです。これは正しいです?
また、現在私のライブラリを使用しているアプリケーションはどれもそのメソッドを使用していないと確信しています。これは、完全に壊れており、機能しないためです。したがって、基本メソッドの実装に対する既存の呼び出しを壊すことについて心配する必要はありません。他に何も壊さないようにしたいと思います。