1,VB中Friend关键字的作用,能跟其它语言如c++做个对比吗?
2,vb中为什么让BOOLEAN占用16个位?
3,vb中Null定义的二进制数是多少,为什么True or Null = True,False or Null = Null?
2,vb中为什么让BOOLEAN占用16个位?
3,vb中Null定义的二进制数是多少,为什么True or Null = True,False or Null = Null?
false=0
true=-1
你把-1转成16进制就明白了
?hex(-1)
FFFF
为什么给它两个字节呢,一个字节不行吗?
与操作系统有关系吗?
Friend 使得该过程在整个工程中都是可见的,但是对于一个对象实例的控制器却是不可见的。Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。因为vb的类型差不多都是com中的类型,所以true是-1,也就是2字节。Null就是0
VB:
类中的 Public 过程在任何地方都可以调用,即使是被该类实例的控制器所调用也可以。声明一个过程为 Private 就阻止了该对象的控制器对于该过程的调用,但是同时也阻止了定义该类的工程内部对该过程的调用。Friend 使得该过程在整个工程中都是可见的,但是对于一个对象实例的控制器却是不可见的。Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。
C++:
加关键字friend ,可以是友元类或友元函数,友元函数是一种定义在类外部的普通函数,但它需要在类体内进行说明,友元不是成员函数,但可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但它破坏了类的封装和隐藏性。
2、vb中为什么让BOOLEAN占用16个位?
1byte=8bit
1byte=1个字节 双字节=16bit
3,vb中Null定义的二进制数是多少?
null的二进制数是0
//为什么给它两个字节呢,一个字节不行吗?
//与操作系统有关系吗?与系统无关,VB规定了true=-1,-1就要占用两字节的空间,前面给你演示了啊
再说清楚些,
ture=-1,-1等于&HFFFF,&HFFFF=1111111111111111,你数数看,是不是占了16个位
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吗?我还没有试,不好意思。
明天继续讨论吧。谢谢各位。
BOOLEAN 为逻辑型,它的值有两个:真(True) 和 假(False )是双字节
当逻辑型转换为数据型时:true转换为-1 、 False转换为0
当数据型转换为逻辑型时:非0转换为true 、 0转换为False
而 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的空间。
明天再讨论,呵呵。
win32 api 的 BOOL 是32位。实际上就是因为它规定 True = -1。VB 中没有带符号的 Byte(类似 C 的 char)。
不过记的不清楚了
比如一个工程中有两个类a b
有的时候b需要用a的一个方法(或者公共模块,也许这种情况更多),而这个方法对外是不需要的,而如果你用public声明的话,结果就是其它开发人员发现a提供了一个不能使用的方法
or是一真为真,两假才为假