0

我在使用 C++ 上的覆盖方法时遇到问题

首先,一切正常,然后,我进行了一些更改以使代码更加“有条理”并在 GitHub 上共享。

在做了一些 OO 更改后,为了方便和更容易理解,我的代码停止了工作,并且因为一件非常奇怪的事情。

ViewGroup是一个扩展的类View,并具有从 中覆盖的方法 HitTest 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

查看.cpp:https ://www.dropbox.com/s/4sb82d6thqz34od/View.cpp

更新 2:

问题是由方法声明中的一个愚蠢错误引起的。一个,被宣布为hitTest(int x, int y),另一个,hitTest(long x, long y)

它发生在“清理”和改进代码时。

但是,这很奇怪,因为它在我复制对象之前可以工作,而在复制之后,就不再...

4

1 回答 1

5

hitTest 的两个参数版本的签名是不同的。如果您正在编写 C++11,请使用 override 关键字来覆盖所有虚函数……它会让您免去这种痛苦。

于 2013-05-19T06:49:43.463 回答