指针副本的虚方法不工作
Virtual method of copy of Pointer not working
我在c++上有一个重写方法的问题
首先,一切工作正常,然后,我做了一些改变,使代码更"有组织"。并在GitHub上分享。
在做了一些面向对象的修改之后,为了方便和使它更容易理解,我的代码停止工作了,因为一件非常奇怪的事情。
ViewGroup
是一个扩展了View
的类,并且具有从View
重写的方法HitTest。
所以,基本上:如果我调用hitTest,我必须在ViewGroup(如果它是一个ViewGroup)上运行,或者在视图上运行;
那好吧,我把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)
更新:
更新2: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
这个问题是由方法声明上的一个低级错误引起的。一个声明为hitTest(int x, int y)
,另一个声明为hitTest(long x, long y)
。
它发生在"清洁"时。和改进代码。
但是,这很奇怪,因为它在我复制对象之前是工作的,而在复制之后,就不再工作了。
两个参数版本的hitTest的签名是不同的。如果你在c++ 11中编写代码,对所有虚函数的重写都使用override关键字……它将使你免于这种痛苦。
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- std::bind,无法让具有单个参数的方法工作
- 私有变量无法正常工作的C++getter方法(只有Java经验)
- 虚拟基类在内部如何工作?编译器如何解析对基方法的调用?
- 让类与运算符一起工作更简单的方法
- 找不到使保证返回值优化工作的方法
- C++ set_difference方法未按预期工作
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- C 方法无法工作
- 我是否应该在构造函数或成员方法中进行大量初始化工作
- 请告诉我在巴泽尔拥有多平台工作空间的更好方法
- 这种奇怪的 I/O 方法是如何工作的?
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- 我试着了解方法覆盖是如何工作的,不知道为什么输出 2
- 我的重载后增量方法无法按预期工作。为什么?
- 无法使方法存在检测机制正常工作
- 在多线程中使用curl句柄的错误工作方法的替代方法