关于一个函数的问题?(100分)

  • 主题发起人 主题发起人 sunda
  • 开始时间 开始时间
S

sunda

Unregistered / Unconfirmed
GUEST, unregistred user!
对于一个函数应该在整个程序的什么位置声明???
 
private或是public中
 
如果要给其他unit调用,放implementation上面
如果只有自己的unit要调用他,放implementation下面
 
全局函数不应该在一个CLASS的private或是public中,应该在一个UNIT的interface段中,
但不能在任一个CLASS的段里。然后在想使用该函数的UNIT里USES这个UNIT就可以了。
 
不好意思,还是有点不明白
 
举个例子,注意这里fun函数,是放在interface中,但不在TForm1的类定义中:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
function fun(ap:integer):integer;
var
Form1: TForm1;
implementation
{$R *.DFM}
function fun(ap:integer):integer;
begin
Result:=1;
end;
end.
 
其他结合具体情况,好象都差不多了
一般在TForm1 = class(TForm)内
不举例了
 
1. 可以在private, public等中声明(可见性有区别, private中声明的是私有的,
只能被同一类或其派生类访问)
例如:
...
private
{ Private declarations }
BackGround_Image:TBitmap

procedure winexit(var msg:Tmessage);message WM_QUERYENDSESSION;
procedure init_picture;
...

2. 在函数或过程中内部声明
例如:
...
procedure TForm1.Button1Click(Sender: TObject);
function GetSum(x,y:integer):integer;
begin
GetSum:=x+y;
end;

begin
if (edit1.Text<>'') and (edit2.Text<>'') then
edit3.Text:=inttostr(GetSum(strtoint(edit1.text),strtoint(edit2.text)))
else
showmessage('请为x,y赋值!!!');
end;
...

3.外部函数或过程(在其他程序中定义或声明的)
 
隨便什麽地方
public
private 声明为方法
接口部分声明可以在其他单元引用
实现部分要保证声明的函数在调用以前,否则用向前引用
 
我想调用ln和log函数,应该如何去声明为什么abs就不需要声名而可以直接使用呢???
 
abs是系统函数,当然不要声名
 
一般情况下放在
implementation和
{$R *.DFM}
之间
 
有谁看过system单元吗?其中interface部分并没有例如Copy、New及Dispose等函数的
声明,在implementation中也没有相应的过程,只有如下定义:
procedure _Copy{ s : ShortString
index, count : Integer ) : ShortString};
procedure _New;
procedure _Dispose;
但是你敲 system. 却在列表中看不到_Copy等而能看到Copy,这是怎么会事?
在这些函数上有这样一行注释:
{ Procedures and functions that need compiler magic }
是什么意思呢?
 
具体情况具体对待。
看你要在哪个地方调用函数。
 
system单元中有许多的函数其实是用汇编语言写的,所以看不到。
对于函数出现在何位置,应根据不同的需要来定。只在内部应用的,应放到
implementation中声明;如要其他unit也可调用本unit的函数,则必须放到
interface中声明。
 
就是这样,该说的,都说了。
 
补充一点:
如果让多个控件共用一个过程,不能声明在private或public中,应该声明在private
的上面声明。
还有,如果不涉及到vcl,可以不用声明,所以douh所举的例子可以不声明。
 
后退
顶部