这是我在Delphi从入门到精通系列看到的一个例子,结果发现有很多地方不明白,麻烦各位先看看好吗?所有不明白的地方已经做了标记,虽然很多,知道看下去会比较烦,但是我身旁没有人可以问,只能在这里麻烦大家了······
unit Dates;interfacetype
  TDate = class
  private
    fDate: TDateTime;
    procedure SetDay(const Value: Integer);
    procedure SetMonth(const Value: Integer);
    procedure SetYear(const Value: Integer);
    {下面三个函数不是已经定义了取得Day、Month、Year的值了吗?}
    function GetDay: Integer;
    function GetMonth: Integer;
    function GetYear: Integer;
  public
    constructor Create; overload;
    constructor Create (y, m, d: Integer); overload; //既然有了上面的Create,那这里是用来?
    procedure SetValue (y, m, d: Integer); overload;
    procedure SetValue (NewDate: TDateTime); overload;
    procedure Assign(Source: TDate);    function LeapYear: Boolean;
    procedure Increase (NumberOfDays: Integer = 1);
    procedure Decrease (NumberOfDays: Integer = 1);
    function GetText: string;
    {可是这里又定义了三个取得Day、Month、Year的值的属性(方法)??}
    property Year: Integer read GetYear write SetYear;
    property Month: Integer read GetMonth write SetMonth;
    property Day: Integer read GetDay write SetDay;
  end;implementationuses
  SysUtils, DateUtils;procedure TDate.Assign (Source: TDate);   //用Assign来为复制TDate内部的数据吗?如果没有这一步的话会??
begin
  fDate := Source.fDate;
end;procedure TDate.SetValue (y, m, d: Integer);
begin
  fDate := EncodeDate (y, m, d);      //EncodeDate的作用是??
end;function TDate.LeapYear: Boolean;
begin
  Result := IsInLeapYear(fDate);
end;procedure TDate.Increase (NumberOfDays: Integer = 1);
begin
  fDate := fDate + NumberOfDays;
end;function TDate.GetText: string;
begin
  GetText := DateToStr (fDate);
end;procedure TDate.Decrease (NumberOfDays: Integer = 1);
begin
  fDate := fDate - NumberOfDays;
end;constructor TDate.Create (y, m, d: Integer);
begin
  inherited Create;      //继承了上面Public里面的Creat吗?
  fDate := EncodeDate (y, m, d);
end;constructor TDate.Create;
begin
  inherited Create;
  fDate := Date;
end;procedure TDate.SetValue(NewDate: TDateTime);
begin
  fDate := NewDate;
end;procedure TDate.SetDay(const Value: Integer);
begin
  fDate := RecodeDay (fDate, Value);  //  RecodeDay这个函数在这里的作用是??
end;procedure TDate.SetMonth(const Value: Integer);
begin
  fDate := RecodeMonth (fDate, Value);
end;procedure TDate.SetYear(const Value: Integer);
begin
  fDate := RecodeYear (fDate, Value);
end;function TDate.GetDay: Integer;
begin
  Result := DayOf (fDate);         //DayOf 这个函数是??
end;function TDate.GetMonth: Integer;
begin
  Result := MonthOf (fDate);
end;function TDate.GetYear: Integer;
begin
  Result := YearOf (fDate);
end;end.

解决方案 »

  1.   

    这个学期因为要做数据库开发,才接触到了Delphi,本来是制定了这样的计划的:
    9-10月,系统学习Pascal
    11-1月,学习Opp Pascal 和Delphi组件的应用,开始尝试编一些小小的应用程序
    寒假到2月份中旬,开发一个小型数据库。
    不知道上面的计划是否科学,可是我已经完成了Pascal的学习,感觉还可以。可是下来的学习就让我有迷惑了。之前在学习图书馆借了一半介绍Delphi组件的,可是在看了一半后发觉。里面只是介绍怎么用组件,感觉是表面上的东西,然而里面的程序为什么那样写,各个代码又是什么意思,则很少提到,于是我又找来了从入门到精通来看,然而因为之前自己只学过C,没有面向对象语言的基础,所以感觉看那本书比较吃力,上面就是一个折腾我几天的一个程序,感觉入门到精通系列并不适合初学者,里面的实例太少了,我明白程序这种东西要是几天自己没有动手写代码的话,就会很生疏的,无奈坎图大师的这本书书可以用来练习的实例太少了。而且里面对Delphi组件的介绍只是稍微的提及而已。我怀疑,即使是我认真学完了那本书,缺少开发经验的我能否在2月份做一个数据库呢??
    感觉现在好乱,Delphi的学习难度远超出我的意料,不知道下来该怎么办,是否还要按照原来的计划学习呢?迷惘中······
      

  2.   

    看了你前面的代码和提问,提点学习建议:1、熟悉Object Pascal对象的语法。
    2、了解属性的构成:property 属性:类型 read 读方法 write 写方法;读、写方法是写在类里面的,property 只是对这些方法的引用。
    3、Create可以是多态的,只要方法使用constructor关键字,不用用其它名称也行的。
    4、熟悉Delphi的常用组件的用法。
    5、熟悉常用函数的使用。
      

  3.   

    建议看刘艺的DELPHI面向对象那本书
      

  4.   

    有些提问时不必要的,如"EncodeDate的作用是??",看内容也知道是用年月日合成一个时间,如果怀疑,查看帮助,否则,提问太多,别人不好回答的
      

  5.   

    谢谢各位!!经过一阵子的学习,已经慢慢的看懂了OOP的程序了,看来学习的效果慢慢出现了,呵呵,很高兴~
      

  6.   

    我觉得最快的方法找一本delphi数据库编程的书或在网上下载一个小例子,照着写几个小例子就行了.
    因为delphi的最大特点就是利用组件快速开发,上手很快.
    然后再找本面像对像的书深入研究,再就是看delphi的源代码