(1)含有纯虚函数的类可以被实例化。
(2)同一单元中的类互为友元
(3)子类可以访问父类的私有成员变量感觉在一个单元中,所有的封装全被打破!  和就封装一个窗口有什么区别? 
Delphi面向对象好象不怎么样呀...:)

解决方案 »

  1.   

    (1)  原来一些Object Pascal版本是不能被实例化,这只能说是一种进步吧,因为有些类的虚函数是供子类重载,该类并不会调用,为什么不让这个具有虚函数的类实例化呢?我遇到过这样的应用,如果所有带有虚函数的类都不能实例化,那么我就非得继承它,然后用一个空函数(因为我不会调用他们)来覆盖虚函数,这不是脱裤子放屁吗?(2),(3),以前有人说一个单元可以看成是一个类。类的所在单元的安排是有些需要考虑的地方,安排得好,你就不会有这种疑问了。
      

  2.   

    hahaha ,alphax兄弟,你的话很经典啊,哈哈,脱了裤子放P,呵呵哈哈,经典,收藏!
      

  3.   

    别听FrameSniper乱说,我的是学文学家们的艺术手法,没有别的意思,我意思是说
    如果为了使用这个类,就因为这个类有一些我不需要用到的虚函数而要重载这个类,
    有点没必要。特此更正
      

  4.   

    (1)含有纯虚函数的类可以被实例化。]
        为什么不行?你能保证不调用到那些虚函数用一下还不行么?
    (2)同一单元中的类互为友元
        友元怎么了?Delphi中根本就没有友元一说。OOP中三大要素也没有友元。
        不要拿C++的东西来套用Delphi。那样的话我还说C++的类型不够丰富没有枚举类型。
        C++的函数不够灵活,不支持函数中嵌套函数呢。 
    (3)子类可以访问父类的私有成员变量
        谁说子类可以访问父类的私有成员,如果不在同一单元内当然不能访问私有成员了。
        如果在同一个单元内的话就要遵守同一单元内互相可访问任意成员的规则。
    Java不也是这样的么?同一个包内的可访问任意成员。
    你还是好好看看什么是OOP再来评价Delphi。不要把C++认为是OOP的标准,SmallTalk才是真正的OOP鼻祖,以此为标准C++、Delphi也算不上完全OOP,Java才勉强搭的上边,可是真正的OOP语言却没有市场。
      

  5.   

    delphi 里的Unit真是个让人喜欢让人忧的动动,从OO的教条来说,Unit可以说是打破OO限制的"罪魁祸首",但我们没有什么理由批评unit,一切全部为了好用,方便,c++,java都有类似的实现.知道怎么使用才是重要的,这个问题我还得请教一下大家,我有一个子窗体,定义在unit里和类里在使用上,功用上,有什么区别?谢谢?
      

  6.   

    楼上的说道都对,只要小心使用,Delphi这样处理可以给我们带来很大的方便
      

  7.   

    具有虚函数的类在原来的一些版本中是不能被实例化的,现在的版本可以了,但其中的真正原因或者真正的意图,我不知道。大家探讨吧。下面有一个情况:第三方提供了一个类库,比如主要用于做文本预处理,预处理器的基类带有一些abstract函数(没有class abstract函数),但是这些函数要调用了Run以后才会调用的,主要是创建一些提供预处理策略的协调对象。对于这个预处理器,它的基类本身就有一些知识,比如对各种语言的识别,各种语言的词法。举个例子,这个基类实现了的一个功能就是设置他的Source属性,然后调用一个GetSourceType,它就会执行一个动作,对Source进行推测,然后会返回推测的结果--Source的类型,如Pascal, C, SQL等等。那么如果我仅仅是想执行GetSourceType这个操作,是否需要创建它的某个子类的实例呢?
    我觉得,我创建这个基类的实例就可以了。
      

  8.   

    (1) 举个比喻:主板上有很多扩展槽,难道非要把它们插满才能用么?至于szcoder(CS)所说的问题,应该不存在,你不会连类的定义都没有吧就去调用它了吧?(2) 既然是在同一单元中,那么对该单元的设计者而言,其中的所有类的定义都是很清楚的,允许它们互访私有成员有什么不可以?私有成员本来就是只给类的代码实现者用的。
      

  9.   

    这个是OP和其他OO语言不同的地方。究竟为什么要搞成这样,只有BORLAND才知道了。
    不喜欢的人说它违反了OO原则,喜欢的人说它是一种进步,呵呵。
    不过既然你选择了这种语言,你就节哀顺便吧。:)