C++ でのメソッドのオーバーライドに問題があります
まず、すべてがうまくいきました。次に、コードをより「整理」し、GitHub で共有するためにいくつかの変更を加えました。
オブジェクト指向の変更をいくつか行った後、理解しやすくするためにコードが機能しなくなりました。これは非常に奇妙なことが原因でした。
ViewGroup
は、 を拡張したクラスでView
あり、メソッド HitTest オーバーライド from を持っていますView
。
したがって、基本的には、hitTest を呼び出す場合、ViewGroup (ViewGroup の場合) または View で実行している必要があります。
わかりました。メソッドにを配置virtual
し、ViewGroup で直接実行すると、実際には ViewGroup から hitTest が実行されます。
しかし、新しいポインターを作成して実行しようとすると、ViewGroup で hitTest が実行されなくなり、View で実行されます。理解を容易にするために:
ViewGroup *v = new ViewGroup();
View *t = v;
v->hitTest(100,100); // Runs on ViewGroup (OK)
t->hitTest(100,100); // Runs on View (NOT OK)
アップデート:
ViewGroup.h: https://www.dropbox.com/s/a3lqbm73qlxds3i/ViewGroup.h
ViewGroup.cpp: https://www.dropbox.com/s/vxbqsh6ol430x4p/ViewGroup.cpp
View.h: https://www.dropbox.com/s/tcrb75dmx3v6pgq/View.h
View.cpp: https://www.dropbox.com/s/4sb82d6thqz34od/View.cpp
更新 2:
この問題は、メソッドの宣言の愚かな間違いによって引き起こされました。1 つは として宣言され、もう 1 つは として宣言されましhitTest(int x, int y)
たhitTest(long x, long y)
。
コードの「クリーニング」と改善中に発生しました。
しかし、オブジェクトをコピーする前は機能していましたが、コピーした後は機能しなくなったため、非常に奇妙です...