1,VB中Friend关键字的作用,能跟其它语言如c++做个对比吗?
2,vb中为什么让BOOLEAN占用16个位?
3,vb中Null定义的二进制数是多少,为什么True or Null = True,False or Null = Null?

解决方案 »

  1.   

    faint,看似小问题,偶一个不懂
      

  2.   

    2,boolean型占2字节,当然是16个位啦
    false=0
    true=-1
    你把-1转成16进制就明白了
    ?hex(-1)
    FFFF
      

  3.   

    to:BlueBeer(1win) 
    为什么给它两个字节呢,一个字节不行吗?
    与操作系统有关系吗?
      

  4.   

    msdn上说:
    Friend 使得该过程在整个工程中都是可见的,但是对于一个对象实例的控制器却是不可见的。Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。因为vb的类型差不多都是com中的类型,所以true是-1,也就是2字节。Null就是0
      

  5.   

    1、VB中Friend关键字的作用,能跟其它语言如c++做个对比吗?
    VB:
    类中的 Public 过程在任何地方都可以调用,即使是被该类实例的控制器所调用也可以。声明一个过程为 Private 就阻止了该对象的控制器对于该过程的调用,但是同时也阻止了定义该类的工程内部对该过程的调用。Friend 使得该过程在整个工程中都是可见的,但是对于一个对象实例的控制器却是不可见的。Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。
    C++:
    加关键字friend ,可以是友元类或友元函数,友元函数是一种定义在类外部的普通函数,但它需要在类体内进行说明,友元不是成员函数,但可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但它破坏了类的封装和隐藏性。
    2、vb中为什么让BOOLEAN占用16个位?
    1byte=8bit
    1byte=1个字节  双字节=16bit
    3,vb中Null定义的二进制数是多少?
    null的二进制数是0
      

  6.   

    //to:BlueBeer(1win) 
    //为什么给它两个字节呢,一个字节不行吗?
    //与操作系统有关系吗?与系统无关,VB规定了true=-1,-1就要占用两字节的空间,前面给你演示了啊
    再说清楚些,
    ture=-1,-1等于&HFFFF,&HFFFF=1111111111111111,你数数看,是不是占了16个位
      

  7.   

    这个讨论有点意思。
    1,true=-1,-1就是要占两个字节,那么为什么-1就一定要用两个字节表示呢?
    2,一个 Friend 过程不能被后期绑定,这是我问第一个问题的目的,我想不通VB干吗搞了这么个关键字,目的何在?
    3,True or Null = True,False or Null = Null,
    那么True or 0= True,False or 0= 0吗?我还没有试,不好意思。
    明天继续讨论吧。谢谢各位。
      

  8.   

    2、vb中为什么让BOOLEAN占用16个位?
    BOOLEAN 为逻辑型,它的值有两个:真(True) 和 假(False )是双字节
    当逻辑型转换为数据型时:true转换为-1 、 False转换为0
    当数据型转换为逻辑型时:非0转换为true 、 0转换为False
      

  9.   

    //1,VB中Friend关键字的作用,能跟其它语言如c++做个对比吗?VB 中的 Friend 和 C++ 中的一般成员函数(非virtual)是一样的。
    而 vb 中的 public 和 private 都是 virtual 成员函数。
    //2,vb中为什么让BOOLEAN占用16个位?16位boolean 是 OLE Automation 的规定,可能是当年为了兼容16位系统。
    win32 api 的 BOOL 是32位。
    //3,vb中Null定义的二进制数是多少,为什么True or Null = True,False or Null = Null?只有 Variant 才可以有 Null,而Variant其实是一个OLE Automation的16字节VARIANT结构。
    Null Variant 对应的VARIANT结构的vt值是VT_NULL
    Empty 的vt值是VT_EMPTY
    详见 MSDN 的 Automation 一节。
    不要把 windows api 的 NULL 和 vb 的 Null Variant 搞混了。VB的 Null != 0
    (注意 NULL 和 Null 的字母的大小写)
    //那么为什么-1就一定要用两个字节表示呢?vb默认小于32767的数的类型是 Integer = 2字节
    //我想不通VB干吗搞了这么个关键字[Friend],目的何在?理论上 Friend 要比 public/private 快一小点(不用用vtable),而且不占用vtable的空间。
    明天再讨论,呵呵。
      

  10.   

    //2,vb中为什么让BOOLEAN占用16个位?>>16位boolean 是 OLE Automation 的规定,可能是当年为了兼容16位系统。
    win32 api 的 BOOL 是32位。实际上就是因为它规定 True = -1。VB 中没有带符号的 Byte(类似 C 的 char)。
      

  11.   

    Friend相当于友元有的时候应该用的
    不过记的不清楚了
    比如一个工程中有两个类a b
    有的时候b需要用a的一个方法(或者公共模块,也许这种情况更多),而这个方法对外是不需要的,而如果你用public声明的话,结果就是其它开发人员发现a提供了一个不能使用的方法
      

  12.   

    null=0
     or是一真为真,两假才为假
      

  13.   

    helanshan() 你是高手,答案很准确