Iva*_*del 0 c++ inheritance pointers class object
我在使用C++上的Overriding方法时遇到问题
首先,一切正常,然后,我做了一些更改,以保持代码更"有条理",并在GitHub上分享.
在做了一些OO更改之后,为了方便并使其更容易理解,我的代码停止了工作,并且因为一个非常奇怪的事情.
ViewGroup
是一个扩展的类View
,并具有HitTest重写的方法View
.
所以,基本上:如果我调用hitTest,我必须在ViewGroup上运行(如果它是ViewGroup),或者在View上运行;
好吧,我把它virtual
放在我的方法上,如果我DIRECLY在我的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)
Run Code Online (Sandbox Code Playgroud)
更新:
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:
问题是由于方法声明上的一个愚蠢错误造成的.一个,被宣布为hitTest(int x, int y)
另一个,hitTest(long x, long y)
.
它发生在"清理"和改进代码时.
但是,它非常奇怪,因为它在我复制对象之前工作,并且在复制之后,不再是......
hitTest的两个参数版本的签名是不同的.如果您正在使用C++ 11进行编码,请对所有虚拟函数覆盖使用override关键字......它将为您带来这种悲伤.