刚学delphi,菜鸟问题 请问各位高手,类中构造函数在什么情况下使用?构造函数是用来对对象进行初始化的,是不是声明对象时都需要用到?有没有类的简单程序,举个例子指点我一下。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 类中构造函数在什么情况下使用?构造函数是用来对对象进行初始化的,是不是声明对象时都需要用到?有没有类的简单程序,举个例子指点我一下。构造函数在类初始化的时候使用,DELPHI中声明对象,一般的写法是*** = 类名.create (NULL);类的简单例子就太多了.看帮助就有了.unit Person_Cls; 2 3 interface 4 5 type 6 Person=class //基类 7 private 8 name:string; //私有变量(姓名,性别,身高,体重) 9 sex:string; 10 year:integer; 11 tall:integer; 12 weight:integer; 13 function get_name:string; //声明返回和设置属性的函数 14 procedure set_name(Value:string); //以下同 15 function get_sex:string; 16 procedure set_sex(Value:string); 17 function get_year:integer; 18 procedure set_year(Value:integer); 19 function get_tall:integer; 20 procedure set_tall(Value:integer); 21 function get_weight:integer; 22 procedure set_weight(Value:integer); 23 24 public 25 constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload; 26 constructor Create(Name:string;Sex:string);overload; //重载构造函数,注意一定要使用关键字:overload 27 property _name:string read get_name write set_name; //为类定义属性,以便在外部可以访问 28 property _sex:string read get_sex write set_sex; //其中read表示可读,后面紧跟一个返回该属性值的函数名 29 property _year:integer read get_year write set_year; //write 表示可写,后面紧跟一个设置该属性值的函数名 30 property _tall:integer read get_tall write set_tall; 31 property _weight:integer read get_weight write set_weight; 32 33 end; 34 35 implementation 36 //构造函数的实现 37 constructor Person.Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer); 38 begin 39 Self.name:=Name ; Self.sex:=Sex ; Self.year:=Year ; Self.tall:=Tall; Self.weight:=Weight ; 40 41 end; 42 constructor Person.Create(Name:string;Sex:string); 43 begin 44 Self.name:=Name ; Self.sex:=Sex ; Self.year:=0 ; Self.tall:=0; Self.weight:=0; 45 end; 46 47 //类属性的内部实现 请与c#作比较:get{},set{} 48 function Person.get_name:string; 49 begin 50 result:=Self.name ; 51 end; 52 procedure Person.set_name(Value:string); 53 begin 54 if (Value<>'') then 55 name :=Value ; 56 end; 57 function Person.get_sex :string; 58 begin 59 result:=Self.sex; 60 end; 61 procedure Person.set_sex(Value:string); 62 begin 63 if((Value<>'female') and (Value<>'male')) then 64 Self.sex :='male' 65 else 66 Self.sex :=Value; 67 68 end; 69 function Person.get_year :integer; 70 begin 71 result:=Self.year ; 72 end; 73 procedure Person.set_year(Value:integer); 74 begin 75 if(Value>200) then 76 Self.year :=0 77 else 78 Self.year :=Value ; 79 end; 80 function Person.get_tall :integer; 81 begin 82 result:=Self.tall ; 83 end; 84 procedure Person.set_tall (Value:integer); 85 begin 86 if(Value>300) then 87 Self.tall:=0 88 else 89 Self.tall:=Value ; 90 end; 91 92 function Person.get_weight :integer; 93 begin 94 result:=Self.weight ; 95 end; 96 procedure Person.set_weight(Value:integer); 97 begin 98 if(Value>1000) then 99 Self.weight:=0100 else101 Self.weight:=Value ;102 end;103 104 end DELPHI中是必须的,一般的别的面向对象语言不用,一般的语言在声明一个对象变量时就已经调用了构造函数了,而DELPHI必须要用CREATE一下,这和DELPHI的实现技术有关系 procedure TForm1.Button1Click(Sender: TObject);vart : TStringList;begin t := TStringList.Create;//创建,调用构造函数 t.LoadFromFile('d:\aa.txt');//使用它完成某些特定功能 t.Free;//释放。end; 自定义的类或动态创建的组建一般都要显式创建的,设计期的组建不用显式创建,有些特殊的对象也是不用显式创建的,如applicatoin和screen type TMyFamliy = Class不清 //MyFamliy 类Private FMyFatherName: string ; FMyMotherName: string ; Public Constructor Create(FMyFatherName, FMyMotherName: String); //构造函数end;创建对象时,则调用构造函数:MyFamliyObject := TMyFamliy.Create('liu','Li');可以构造函数的作用是用来初始化数据成员的,哪么没有构造函数会怎样呢?答案是可以的,只不过数据成员没有初始化,编译器会对所有的成员进行清零初始化. 这个应该很明白了吧,和C++对照起来应该熟悉了一下,DELPHI的类了吧,记得结贴喔. MIDAS程序打包要包括那些文件? 无模式dll的问题,紧急 请教个关于image的问题 windows编程中的一些属性设置用的是什么控件?可以进行折叠。 adodataset是不是有什么缓存机制啊?为什么我用一个adocommand把它的记录删除了,他都不会立即更新。 为了做一个通用的查找窗,请教各位大侠 关于unit单元文件的结构问题 菜鸟问题:Delphi在那里定义类型比较好 为什么我做的数据库报表只显示第一条记录(已有11条记录),应该在哪里设置, 计算机机器代码与CPU间的关系 招聘DELPHI程序员 用adoquery.savetofile生成了一个xml文件
*** = 类名.create (NULL);
类的简单例子就太多了.看帮助就有了.
unit Person_Cls;
2
3 interface
4
5 type
6 Person=class //基类
7 private
8 name:string; //私有变量(姓名,性别,身高,体重)
9 sex:string;
10 year:integer;
11 tall:integer;
12 weight:integer;
13 function get_name:string; //声明返回和设置属性的函数
14 procedure set_name(Value:string); //以下同
15 function get_sex:string;
16 procedure set_sex(Value:string);
17 function get_year:integer;
18 procedure set_year(Value:integer);
19 function get_tall:integer;
20 procedure set_tall(Value:integer);
21 function get_weight:integer;
22 procedure set_weight(Value:integer);
23
24 public
25 constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload;
26 constructor Create(Name:string;Sex:string);overload; //重载构造函数,注意一定要使用关键字:overload
27 property _name:string read get_name write set_name; //为类定义属性,以便在外部可以访问
28 property _sex:string read get_sex write set_sex; //其中read表示可读,后面紧跟一个返回该属性值的函数名
29 property _year:integer read get_year write set_year; //write 表示可写,后面紧跟一个设置该属性值的函数名
30 property _tall:integer read get_tall write set_tall;
31 property _weight:integer read get_weight write set_weight;
32
33 end;
34
35 implementation
36 //构造函数的实现
37 constructor Person.Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);
38 begin
39 Self.name:=Name ; Self.sex:=Sex ; Self.year:=Year ; Self.tall:=Tall; Self.weight:=Weight ;
40
41 end;
42 constructor Person.Create(Name:string;Sex:string);
43 begin
44 Self.name:=Name ; Self.sex:=Sex ; Self.year:=0 ; Self.tall:=0; Self.weight:=0;
45 end;
46
47 //类属性的内部实现 请与c#作比较:get{},set{}
48 function Person.get_name:string;
49 begin
50 result:=Self.name ;
51 end;
52 procedure Person.set_name(Value:string);
53 begin
54 if (Value<>'') then
55 name :=Value ;
56 end;
57 function Person.get_sex :string;
58 begin
59 result:=Self.sex;
60 end;
61 procedure Person.set_sex(Value:string);
62 begin
63 if((Value<>'female') and (Value<>'male')) then
64 Self.sex :='male'
65 else
66 Self.sex :=Value;
67
68 end;
69 function Person.get_year :integer;
70 begin
71 result:=Self.year ;
72 end;
73 procedure Person.set_year(Value:integer);
74 begin
75 if(Value>200) then
76 Self.year :=0
77 else
78 Self.year :=Value ;
79 end;
80 function Person.get_tall :integer;
81 begin
82 result:=Self.tall ;
83 end;
84 procedure Person.set_tall (Value:integer);
85 begin
86 if(Value>300) then
87 Self.tall:=0
88 else
89 Self.tall:=Value ;
90 end;
91
92 function Person.get_weight :integer;
93 begin
94 result:=Self.weight ;
95 end;
96 procedure Person.set_weight(Value:integer);
97 begin
98 if(Value>1000) then
99 Self.weight:=0
100 else
101 Self.weight:=Value ;
102 end;
103
104 end
var
t : TStringList;
begin
t := TStringList.Create;//创建,调用构造函数
t.LoadFromFile('d:\aa.txt');//使用它完成某些特定功能
t.Free;//释放。
end;
TMyFamliy = Class不清 //MyFamliy 类
Private
FMyFatherName: string ;
FMyMotherName: string ;
Public
Constructor Create(FMyFatherName, FMyMotherName: String); //构造函数
end;
创建对象时,则调用构造函数:
MyFamliyObject := TMyFamliy.Create('liu','Li');可以构造函数的作用是用来初始化数据成员的,哪么没有构造函数会怎样呢?
答案是可以的,只不过数据成员没有初始化,编译器会对所有的成员进行清零初始化.
记得结贴喔.