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;
implementation

end.


车身类:

{-----------------------------------------------------------------------------
 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;

implementation

end.


发动机类:

{-----------------------------------------------------------------------------
 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;

implementation

end.


刹车类:

{-----------------------------------------------------------------------------
 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;
implementation

end.


汽车类:

{-----------------------------------------------------------------------------
 Unit Name: BaseCar
 Author:    huyp
 Date:      06-八月-2012
 Purpose:   BaseCar类是基本的汽车类,具有汽车的一般属性,是其它汽车类的基类
 History:   V1.0
-----------------------------------------------------------------------------}
unit BaseCar;

interface
uses
   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;
implementation
var
  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;

interface
uses
    BaseCar, Dialogs;
{AudiA4}
type
  TAudiA4 = class(TCar)
  private
     procedure starting; override;  //重写汽车启动函数
     procedure driving;  override;  //重写汽车行驶函数
     procedure stopping; override;  //重写汽车停止函数
  public
    { Public declarations }
  end;
implementation
var
  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;

interface
uses
    BaseCar, Dialogs;
{BenzC200}
type
  TBenzC200 = class(TCar)
  private
     procedure starting; override;  //重写汽车启动函数
     procedure driving;  override;  //重写汽车行驶函数
     procedure stopping; override;  //重写汽车停止函数
  public
    { Public declarations }
  end;
implementation
var
  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;

interface
uses
   BaseCar, Dialogs;
    {AudiQ7}
type
  TAudiQ7 = class(TCar)
  private
     procedure starting; override;  //重写汽车启动函数
     procedure driving;  override;  //重写汽车行驶函数
     procedure stopping; override;  //重写汽车停止函数
  public
    { Public declarations }
  end;
implementation
var
  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;

interface

uses
  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、这些类都有哪些参数?

自由发挥,查资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值