请教大家一个问题,类的方法与对象的方法
delphi吧
全部回复
仅看楼主
level 1
亮剑zly 楼主
这个问题来自《delphi7完美经典》,看到这段我实在不理解,想请教大家。原文是这样:
代码:
接下来书中的阐述部分:
作者用图7-11与7-12进行对比:
我没有弄明白,TMan是类,PoorWorm是TMan的对象,在代码中,作者先用.create创建了PoorWorm的实体,几句代码后,又用.free对对象和实体进行析构。那为什么,在类TMan的方法列表中看不到sleep方法,而在对象PoorWorm的方法列表中却依然可以看到sleep方法?
后来我想在PoorWorm.free后面增加一行代码,PoorWorm.sleep(A),发现完全正常运行,但是会多弹出一次对话框。难道对象实体被析构之后,它的成员被对象使用吗?很困惑,求解答。
2015年07月28日 08点07分 1
level 1
亮剑zly 楼主
更正一下倒数第二句话,打漏了几个字,“难道对象的实体被析构之后,它的成员依然可以被对象使用吗?”
2015年07月28日 08点07分 2
level 13
首先,对象释放之后,再调用是非常危险的做法,一般不能这么做。其次,这本书本来写法就有问题,因为非抽象类,在未被对象化以前是不能使用其定义的方法的。对于编译器来说,它根本无法理解你所指的那个类究竟是什么,因为没有被分配相应的资源。只有被对象化后,才会知道究竟位于何处,从而可以使用。至于sleep是被类方法还是对象方法,这里不是太重要,只要知道对象和类的区别就行了。
2015年07月28日 09点07分 3
吧务
level 14
对象的实例是一个内存指针。对象释放后,它所指向的方法地址表所占用的内存没有被重写的话,调用一些不涉及私有数据的方法还是可能成功的。
2015年07月28日 11点07分 4
还是不太明白。对象变量里存放的是对象实体的地址。如果对象都被释放了,那么又如何通过对象调用到实体的方法呢?
2015年07月29日 11点07分
回复
����zly
:对象被释放时没有改变对象指向的内存地址。
2015年07月29日 13点07分
回复
����zly
:你改用freeandnil命令试试看就知道了。
2015年07月29日 14点07分
1