读书人

Delphi主要语法和OO特性汽车类作业

发布时间: 2012-08-22 09:50:35 作者: rapoo

Delphi重要语法和OO特性——汽车类作业

? 编写汽车类,要求有汽车、方向盘、车身、发动机、刹车等几个类。

? 模拟一次从启动到结束的过程,并输出汽车的状态变化。

? 同时实现几类汽车:奥迪A4、奔驰C200、奥迪Q7

思考:

1、将方向盘、车身、发动机、刹车分别写成一个类;

2、以上类是汽车类的成员;

3、为汽车添加启动、行驶、停止等过程函数,声明为virtual;

4、奥迪A4、奔驰C200、奥迪Q7分别继承自汽车类,并重写override汽车的启动、行驶、停止等过程函数。

类列举:

方向盘类:

{----------------------------------------- Unit Name: SteeringWheel Author:    huyp Date:      06-八月-2012 Purpose:   汽车部件类方向盘类 History:   V1.0-----------------------------------------}unit SteeringWheel;interface  {SteeringWheel 方向盘类} type  TSteeringWheel = class  private    diameter : real; //方向盘直径    material : string;  public    { Public declarations }  end;implementationend.


车身类:

{----------------------------------------- Unit Name: CarBody Author:    huyp Date:      06-八月-2012 Purpose:   汽车部件类车身类 History:   V1.0-----------------------------------------} unit CarBody;interface{CarBody 车身}  type  TCarBody = class  private    color  : string;    style  : string;    length : real;    weight : real;  public    { Public declarations }  end;implementationend.


发动机类:

{----------------------------------------- Unit Name: Engine Author:    huyp Date:      06-八月-2012 Purpose:   汽车部件类发动机类 History:   V1.0-----------------------------------------}unit Engine;interface{engine 发动机 }  type  TEngine = class  private     numOfCylinder : integer;  //气缸数目     numOfAirValve :integer;   //气门数目     Power : real;  public    { Public declarations }  end;implementationend.


刹车类:

{----------------------------------------- Unit Name: Brake Author:    huyp Date:      06-八月-2012 Purpose:   汽车部件类刹车类 History:   V1.0-----------------------------------------}unit Brake;interface{Brake 刹车 } type  TBrake = class  private     safety : real;          //安全系数  public    { Public declarations }  end;implementationend.


汽车类:

{----------------------------------------- Unit Name: BaseCar Author:    huyp Date:      06-八月-2012 Purpose:   BaseCar类是基本的汽车类,具有汽车的一般属性,是其它汽车类的基类 History:   V1.0-----------------------------------------}unit BaseCar;interfaceuses   Messages, Brake, CarBody, SteeringWheel, Engine, Dialogs;{汽车类}type  TCar = class  private     name : string;     size : string;     manufacture : string;     price : real;  public    { Public declarations }    huypSteeringWheel : TSteeringWheel;   //方向盘类对象    huypCarBody :  TCarBody;              //车身类对象    huypEngine : TEngine;                 //发动机类对象    huypBrake : TBrake;                   //刹车类对象    procedure starting; virtual;          //模拟汽车启动函数,可被子类override    procedure driving;  virtual;          //模拟汽车行驶函数,可被子类override    procedure stopping; virtual;          //模拟汽车停止函数,可被子类override  end;implementationvar  huypCar : TCar;{-----------------------------------------  Procedure: starting  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Funtion: 模拟汽车启动-----------------------------------------}procedure TCar.starting; begin   MessageDlg('This is a car, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;{-----------------------------------------  Procedure: driving  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Funtion: 模拟汽车行驶-----------------------------------------} procedure TCar.driving; begin   MessageDlg('This is a car, it''s driving', mtInformation, [mbOK], 0); end;{-----------------------------------------  Procedure: stopping  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Funtion: 模拟汽车停止-----------------------------------------} procedure TCar.stopping; begin    MessageDlg('This is a car, it''s stopping', mtInformation, [mbOK], 0); end;end.


以下类继承自汽车类:

奥迪A4:

{----------------------------------------- Unit Name: AudiA4 Author:    huyp Date:      06-八月-2012 Purpose:   继承自BaseCar的AudiA4,继承一般汽车的属性之外,重载了BaseCar           的启动,行驶和停止功能 History:  V1.0-----------------------------------------}unit AudiA4;interfaceuses    BaseCar, Dialogs;{AudiA4}type  TAudiA4 = class(TCar)  private     procedure starting; override;  //重写汽车启动函数     procedure driving;  override;  //重写汽车行驶函数     procedure stopping; override;  //重写汽车停止函数  public    { Public declarations }  end;implementationvar  myAudiA4 : TAudiA4;{-----------------------------------------  Procedure: starting  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟AudiA4启动函数-----------------------------------------}procedure TAudiA4.starting;begin  MessageDlg('This is AudiA4, it''s time to go', mtInformation, [mbOK, mbCancel], 0);  end;{-----------------------------------------  Procedure: driving  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟行驶启动函数-----------------------------------------} procedure TAudiA4.driving; begin   MessageDlg('This is AudiA4, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;{-----------------------------------------  Procedure: stopping  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟AudiA4停止函数-----------------------------------------} procedure TAudiA4.stopping; begin   MessageDlg('This is AudiA4, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;end.


奔驰C200:

{----------------------------------------- Unit Name: BenzC200 Author:    huyp Date:      06-八月-2012 Purpose:   继承自BaseCar的BenzC200,继承一般汽车的属性之外,重载了BaseCar           的启动,行驶和停止功能 History:  V1.0-----------------------------------------}unit BenzC200;interfaceuses    BaseCar, Dialogs;{BenzC200}type  TBenzC200 = class(TCar)  private     procedure starting; override;  //重写汽车启动函数     procedure driving;  override;  //重写汽车行驶函数     procedure stopping; override;  //重写汽车停止函数  public    { Public declarations }  end;implementationvar  myBenzC200 : TBenzC200;{-----------------------------------------  Procedure: starting  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟BenzC200启动函数-----------------------------------------}procedure TBenzC200.starting; begin   MessageDlg('This is BenzC200, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;{-----------------------------------------  Procedure: driving  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟BenzC200行驶函数-----------------------------------------} procedure TBenzC200.driving; begin   MessageDlg('This is BenzC200, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end; {-----------------------------------------  Procedure: stopping  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟BenzC200停止函数-----------------------------------------} procedure TBenzC200.stopping; begin   MessageDlg('This is BenzC200, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;end.


奥迪Q7:

{----------------------------------------- Unit Name: AudiQ7 Author:    huyp Date:      06-八月-2012 Purpose:   继承自BaseCar的AudiQ7,继承一般汽车的属性之外,重载了BaseCar           的启动,行驶和停止功能 History:  V1.0-----------------------------------------}unit AudiQ7;interfaceuses   BaseCar, Dialogs;    {AudiQ7}type  TAudiQ7 = class(TCar)  private     procedure starting; override;  //重写汽车启动函数     procedure driving;  override;  //重写汽车行驶函数     procedure stopping; override;  //重写汽车停止函数  public    { Public declarations }  end;implementationvar  myAudiQ7 : TAudiQ7;{-----------------------------------------  Procedure: starting  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟AudiQ7启动函数-----------------------------------------}procedure TAudiQ7.starting; begin   MessageDlg('This is AudiQ7, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;{-----------------------------------------  Procedure: driving  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟AudiQ7行驶函数-----------------------------------------} procedure TAudiQ7.driving; begin   MessageDlg('This is AudiQ7, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;{-----------------------------------------  Procedure: stopping  Author:    huyp  Date:      06-八月-2012  Arguments: None  Result:    None  Function:  模拟AudiQ7停止函数-----------------------------------------} procedure TAudiQ7.stopping; begin   MessageDlg('This is AudiQ7, it''s time to go', mtInformation, [mbOK, mbCancel], 0); end;end.


主窗口中对这些类的相关方法进行调用:

{----------------------------------------- Unit Name: myCar Author:    huyp Date:      06-八月-2012 Purpose:   分别调用TBaseCar TAudiA4 TAudiQ7 TBenzC200类模拟汽车过程 History:   V1.0-----------------------------------------}unit myCar;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Brake, CarBody, SteeringWheel, Engine, BaseCar, AudiA4,  AudiQ7, BenzC200;type    TCarForm = class(TForm)    btnCarProcess: TButton;                        //一般汽车操作按钮    btnAudiA4: TButton;                            //AudiA4操作按钮    btnBenzC200: TButton;                          //BenzC200操作按钮    btnAudiQ7: TButton;                            //AudiQ7操作按钮    procedure btnAudiA4Click(Sender: TObject);     //模拟奥迪A4流程    procedure btnAudiQ7Click(Sender: TObject);     //模拟奥迪Q7流程    procedure btnBenzC200Click(Sender: TObject);   //模拟奔驰C200流程    procedure btnCarProcessClick(Sender: TObject); //模拟一般汽车流程  private    { Private declarations }  public    { Public declarations }  end;var  CarForm: TCarForm;  huypCar : TCar;implementation{$R *.dfm}{-----------------------------------------  Procedure: btnAudiA4Click  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟奥迪A4从启动到停止的流程,调用 TAudiA4类的成员方法-----------------------------------------}procedure TCarForm.btnAudiA4Click(Sender: TObject);var  myAudiA4 : TAudiA4;begin  myAudiA4 := TAudiA4.Create;  myAudiA4.starting;  myAudiA4.driving;  myAudiA4.stopping;  myAudiA4.Free;end;{-----------------------------------------  Procedure: btnAudiQ7Click  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟奥迪Q7从启动到停止的流程,调用 TAudiQ7类的成员方法-----------------------------------------}procedure TCarForm.btnAudiQ7Click(Sender: TObject);var  myAudiQ7 : TAudiQ7;begin  myAudiQ7 := TAudiQ7.Create;  myAudiQ7.starting;  myAudiQ7.driving;  myAudiQ7.stopping;  myAudiQ7.Free;end;{-----------------------------------------  Procedure: btnBenzC200Click  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟BenzC200从启动到停止的流程,调用 TBenzC200类的成员方法-----------------------------------------}procedure TCarForm.btnBenzC200Click(Sender: TObject);var  myBenzC200 : TBenzC200;begin  myBenzC200 := TBenzC200.Create;  myBenzC200.starting;  myBenzC200.driving;  myBenzC200.stopping;  myBenzC200.Free;end;{-----------------------------------------  Procedure: btnCarProcessClick  Author:    huyp  Date:      06-八月-2012  Arguments: Sender: TObject  Result:    None  Function: 模拟car从启动到停止的流程,调用 TCar类的成员方法-----------------------------------------}procedure TCarForm.btnCarProcessClick(Sender: TObject);var  myCar : TCar;begin  myCar := TCar.Create;  myCar.starting;  myCar.driving;  myCar.stopping;  myCar.Free;end;end.


编码规范:

1、将方向盘、车身、发动机、刹车、汽车、奥迪A4、奔驰C200、奥迪Q7都写在一个单独Unit文件中;

2、命名

1)单元文件命名要有意义;

2)控件命名要根据编码规范,例如按钮前缀btn

3)类的命名要加上T,表示它是一个模型;

3、注释

1)每个Unit文件都添加头注释;

2)每个变量声明、函数声明都要添加注释;

3)过程和函数的实现按照GExpert函数标准添加注释;

遇到的问题:

1、怎样将若跟个Unit文件中的类联系起来,互相调用?

在uses后面添加相应的单元文件名称即可。

2、这些类都有哪些参数?

自由发挥,查资料。

读书人网 >.NET

热点推荐