关于什么是静态变量 (300分)

A

Ale.

Unregistered / Unconfirmed
GUEST, unregistred user!
hygsxy 兄,废话我就免了,id=2645430 帖子里的照抄如下:
1.何为静态变量?使用中需要注意什么?
2.派生类中保护字段是否可以引用?这样做的优势是什么?
这个题目归入 Object Pascal 分类,还是老话:可以随便说,不要瞎说。我出最高分,
希望能说详细点,越详细越能保脸,万一没保住老脸,分是不会给你的,万一我问死了你,
也要节哀,毕竟是在 Delphi 闯荡了 7 年的老江湖,跳楼也要跳出飞翔的样子。
 

陈晨

Unregistered / Unconfirmed
GUEST, unregistred user!
!ale 太张狂了哎!
 

东兰梦舞

Unregistered / Unconfirmed
GUEST, unregistred user!
啊……灌水有理!张狂无罪!VB就是好啊!……
 
J

JamesBond_L

Unregistered / Unconfirmed
GUEST, unregistred user!
都很狂的样子呢。[:D]
 

刘麻子

Unregistered / Unconfirmed
GUEST, unregistred user!
同意楼上几位,不知我这样算不算灌水 啊?
 
H

hbsxcjp

Unregistered / Unconfirmed
GUEST, unregistred user!
论剑开始了,我们睁大眼睛看吧!
 
B

bellven

Unregistered / Unconfirmed
GUEST, unregistred user!
料什么俄
 

我是一只小小鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
Ale兄:
不必这么大火气把.

hygsxy 兄:
大富翁不是养老院,资格老不代表什么.

对1我也很有兴趣知道.
我冒昧的猜想一下"静态变量"是不是说的常量在某些时候是可以被当成变量改变它的值(使用条件编译)?
对2没什么好讨论的把,类封装中字段一般提倡是私有的.
 
A

Ale.

Unregistered / Unconfirmed
GUEST, unregistred user!
嘿嘿,楼上各位认为我“张狂”的老大们注意了:
认为我这样做是“张狂”的你,肯定自以为已经理解了题目以及题目的内涵,甚至有些不屑
一顾。请你注意了,这个题目是有 7 年 Delphi 功力的 hygsxy 兄指出的,你这样认为,
未免也太轻视 hygsxy 兄的 7 年功力了,他难道拿个初学者的题目来夸耀自己的水平?仔
细想想吧,或许你会找到一些自己平时不太注意的技术细节,没准你也会突然发现自己什么
都不懂,或者你也许会反思自己一直以为正确的答案....
 

刘浏

Unregistered / Unconfirmed
GUEST, unregistred user!
可惜没人理 [:(]
 
C

cgs3300

Unregistered / Unconfirmed
GUEST, unregistred user!
刚学DELPHI,不知道怎样声明静态变量,记得C有Static。
DELPHI里好象不认。哪位帮忙解释说明一下,谢谢。
 
T

tseug

Unregistered / Unconfirmed
GUEST, unregistred user!
写了一半, 没兴趣了, 等有兴趣了再往下写(还是下棋喝酒快乐)
--------------------------------------------------------
说心里话, 对于这两个问题我也没有什么把握, 不过说说自己的看法而已, 大家别见笑...

1.何为静态变量?使用中需要注意什么?
也许是我资料看得少, 在所读过Delphi的资料中, 并没有见到Delphi把哪一种变量
称之为"静态变量". 这个名词也许是从C/C++引用来的(没作过考证, 从static这个
词猜的), 那么在Delphi里什么样的变量是静态变量呢? 不妨从变量的几个特征开始
探讨一下:
A 类型
对于C/C++中大多数类型,Delphi中都可以直接找到对应的,一些复杂类型也可以
用变通的办法表示出来
B 作用域
在C/C++中,static变量的作用域是它定义的范围,这一点与Delphi的变量作用域
完全相同
C 生存周期
在C/C++中,static变量的生存周期和主进程相同,Delphi中,类似的只有在.DPR
中声明的变量,或者就是const声明的类型常量(typed constant)
D 存储方式
在C/C++中,static变量的存贮空间是编译时分配的,是单独的一段空间.data
段,或者.bss段,Delphi中没有这样的变量,与此类似的就是用const 声明
并且把$J或者$WriteableConst编译器指示字打开的类型常量了。

以此看来,当打开编译指示字以后,以const声明的类型常量就算是Delphi中的
静态变量了,
 
Y

ycxy

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中没有对应的静态变量
 
H

hygsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
Ale小兄弟:
我首先声明,我不是学计算机专业的,我只是一名工作在祖国西部的地质工作者。
我所有的计算机知识都是通过自学得来的,DELPHI也不例外。7年前,大哥我也是一名和你一样张狂的大学生(你是不是大学生我目前还不清楚,索性先这样称呼),初来单位,总是这也看不惯,那也瞧不顺,可真的让你来完成一份现在看来很简单的工作,你还真的什么都不会,这种尴尬的境地基本维持了1-2年。工作7年,接触的人多了,见的世面广了,才发现真的是山外有山,人外有人。我为什么这样说呢,因为我们工作性质的原因,经常有老专家,老教授来我们单位指导工作,看着那些貌不起眼,语不惊人的教授级高工和我们一起探讨工作,一起指定方案,自己都觉的很汗颜,现在真的为自己当年的轻狂而羞愧。我们当时有什么资格来看不起这个,看不起那个,有什么资格觉的自己很了不起!!何况自己还是个刚毕业的学生,一个什么都不懂,基本什么都不会的学生。
大哥我工作7年,从一个技术员直到现在的项目负责(不是计算机行业,是水文地质工程地质环境地质行业),每年都有大学生到我们单位工作,他们刚来的时候都是挺目空一切的,总觉的自己不应该来这样的生产单位,而应该去大城市,好单位,我可以理解他们,毕竟我当年的想法跟他们一样。如果有些人工作一段时间后,还总觉的自己了不起,那作为项目负责,我会采取一些方法来打击他爆棚的自信心。过不了多久,一个个都老实了。我的方法很简单,你不是觉的自己很牛么,安排他写上一份工作设计,等总工,副总把他的设计批的一文不值的时候,他就老实了!
我说这么多,只想说明两点。1:学会谦虚。2:我是如何收拾菜鸟的。
好了,回到问题上来。
1:1.何为静态变量?使用中需要注意什么?
使用const 创建静态变量。过程中的变量是在栈上分配内存的,当过程调用或者退出时,内存空间会来回做出栈入栈动作,并且该变量的作用域是该过程,外部是不可见的。为了达到c/c++静态变量的效果,DELPHI一样可以做。
procedure abc;
const
i:integer=0;
begin
inc(i);
showmessage(inttostr(i));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 3 do abc;
end;
默认情况下,类型化常数是不可赋值的。可以通过$j+编译器指令进行改变,或者在project options对话框中的compiler标签页中通过选择assignable typed constants复选框而产生此效果。
2:派生类中保护字段是否可以引用?这样做的优势是什么?
当然可以引用了。知道了友类的概念就懂了为什么可以引用。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TA=class
protected
x:integer;
end;
TB=class(TA)
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure abc;
var
a:TA;
b:TB;
begin
a:=TA.create;
a.x:=5;
b:=TB.Create;
b.x:=10;
showmessage(inttostr(b.x));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
abc;
end;
end.

希望能说详细点,越详细越能保脸,万一没保住老脸,分是不会给你的,万一我问死了你,
也要节哀,毕竟是在 Delphi 闯荡了 7 年的老江湖,跳楼也要跳出飞翔的样子。
/////
你说这话不觉得很可笑么?还是很张狂啊。我上面的回答,不知道你理解了没有。
就拿我这个不是计算机毕业的人一样可以问的你东倒西歪。不信,还需要我继续问你么?





 
H

hygsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我为什么有如此感言的原因,见帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2645430

来自:Ale., 时间:2004-6-4 12:46:26, ID:2645634
俺用 Delphi 还未过 6 个月,是否需要告诉你因为所以呢?很多用 Delphi 4-5 年的都在
问愚蠢的问题呢,其中也包括你。
 
Y

ycxy

Unregistered / Unconfirmed
GUEST, unregistred user!
建议结束这个帖子
当年Delphi大富翁Barton就是和张无忌怄气
再也不来DelphiBBS
想起来真是遗憾
 

幕后黑手

Unregistered / Unconfirmed
GUEST, unregistred user!
hygsxy 兄说的没错。

大家都是程序员,没必要呕气拉。peace ok
 
H

hygsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
既然大家都这样说了,那我在你的帖子上也不说什么了。其实我们大家不懂的东西都很多,我们来这只是互相交流来的,不要动不动说他人的问题愚蠢,其实自己未必知道的就很多。如果你是计算机专业的,也不要把自己放在一个临驾于他人的位置上,说句不好听的,谁又不是没上过大学,谁又不是不清楚大学里的歪歪道道,光凭老师讲的,我想你基本在DFW里答不出问题。既然大家都自学,又何必我瞧不起你,你瞧不起我的。又何必你的问题愚蠢,我的问题聪明的。
好了,这是我最后的发言,此后不再争论了。
 
Z

zjan521

Unregistered / Unconfirmed
GUEST, unregistred user!
楼主还是结帖吧,本无谓对错,即便有错,又有什么意思呢?
 

我是一只小小鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
to hygsxy

下面是我为什么有如此感言的原因,见帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2645430
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
看了贴子,不觉得你有什么资格去教训菜鸟,你对Aie问题的回答很让我失望.
对问题1
你造了一个在Delphi中不存在的技术名称"静态变量".
对问题2 protected 中定义的字段是为了能让子类使用(不在一个unit),并且这不是一个好的习惯.
Delphi中同一个unit中的类互为友类,对在友类之间字段无论定义为private 还是protected都是可以引用的.
Ael 的作风是比较的狂,但你不是也动不动就要教训菜鸟吗?从你的回答看我很怀疑你是否真的有这个能力.

同意楼上的,楼主结贴把.希望大富翁少出点什么几年以下不要进的贴子.

 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
416
import
I
I
回复
0
查看
407
import
I
顶部