请问各位高手,类中构造函数在什么情况下使用?构造函数是用来对对象进行初始化的,是不是声明对象时都需要用到?有没有类的简单程序,举个例子指点我一下。谢谢!

解决方案 »

  1.   

    类中构造函数在什么情况下使用?构造函数是用来对对象进行初始化的,是不是声明对象时都需要用到?有没有类的简单程序,举个例子指点我一下。构造函数在类初始化的时候使用,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:=0
    100     else
    101       Self.weight:=Value ;
    102 end;
    103 
    104 end
      

  2.   

    DELPHI中是必须的,一般的别的面向对象语言不用,一般的语言在声明一个对象变量时就已经调用了构造函数了,而DELPHI必须要用CREATE一下,这和DELPHI的实现技术有关系
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    t : TStringList;
    begin
      t := TStringList.Create;//创建,调用构造函数
      t.LoadFromFile('d:\aa.txt');//使用它完成某些特定功能
      t.Free;//释放。
    end;
      

  4.   

    自定义的类或动态创建的组建一般都要显式创建的,设计期的组建不用显式创建,有些特殊的对象也是不用显式创建的,如applicatoin和screen
      

  5.   

    type
      TMyFamliy = Class不清            //MyFamliy 类
    Private
       FMyFatherName: string ;
       FMyMotherName: string ; 
    Public
        Constructor Create(FMyFatherName, FMyMotherName: String);  //构造函数
    end;
    创建对象时,则调用构造函数:
    MyFamliyObject := TMyFamliy.Create('liu','Li');可以构造函数的作用是用来初始化数据成员的,哪么没有构造函数会怎样呢?
    答案是可以的,只不过数据成员没有初始化,编译器会对所有的成员进行清零初始化.
      

  6.   

    这个应该很明白了吧,和C++对照起来应该熟悉了一下,DELPHI的类了吧,
    记得结贴喔.