请教个delphi中有关类中权限的问题(100分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
请看以下的例子:
...
Type
Tnum=class
public(或private)
FNum:integer;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ex:TNum;
begin
ex.fnum:=456;
edit1.Text:=inttostr(ex.fnum);
end;
...
这个例子都能运行,而当我把var ex:TNum;放在过程外面时,既;
...
Type
Tnum=class
public(或private)
FNum:integer;
end;

var
ex:TNum;

procedure TForm1.Button1Click(Sender: TObject);
begin
ex.fnum:=456;
edit1.Text:=inttostr(ex.fnum);
end;
...
这个例子都能能编译通过,但在运行时出错。
我想问:
1:当在类中一个成员(FNum)被说明成private时,此成员就不能直接被访问吗?
那在第一个例子中,为何可以直接给此成员赋值(ex.fnum:=456;)呢?
如果可以,能不能举例说明只能用public而不能用private的类中的成员?
2:前后两个例子中,对变量说明在过程内外有何不同?
在外说明是不是说明此变量属于全局变量,而在内说明是不是说明此变量属于局部变量?
谢谢。
 
习习,新浪论坛的那个问题是你问的吧?
我已经在那里回答你了,去看看吧!
 
该类没有构造函数?
是否需要Create?
 
我想 可能是这样的 :
1. 与 c++ 不同, delphi的 类保护是对单元而言 ,即使
是private ,在同一单元中 也可以访问;
2. Tnum 是一个类, 使用前必须create,加上create, 程序
就ok了. 为什么第一个例子可以, 而第二个不可以呢?
这是一因为, ex定义在过程内部, 不会被初始化,因此, ex 指向
某一地址, 而你的类定义十分简单, 没有用到对象实例内部的其他
域,因此, 非常幸运的, 程序没有出错, 如果你的类定义在复杂一些
或者程序再长一些, 就很可能出错, 第二个例子不能执行, 是因为
ex定义为全局变量, 被初始化为nil , 所以访问是出错. 其实, 这样才能让
你知道自己犯了错误. delphi中的对象变量声明, 只是建立了一个指针变量
必须create 才能够使用.
 
到处提问
 
摊主为何 '?' Q_Q ?
 
delphi 中,同一单元中的类都是友类(c++中friend),可以互相访问私有成员!
 
关于变量的作用域:
在interface节声明的变量是global,其它单元通过uses此单元可访问;
在implementation节声明的变量作用域在单元内;
在函数或过程内声明的变量是局部的,只在函数或过程内有效。

 
类应create后再用
变量如为public直接用,private应通过过程用。
出错原因应该如张国龙所诉。cakk你说呢?
 
不对,不对。
请重新回答或则结束问题。
 
多人接受答案了。
 
后退
顶部