• 编写汽车类,要求有汽车、方向盘、车身、发动机、刹车等几个类。
• 模拟一次从启动到结束的过程,并输出汽车的状态变化。
• 同时实现几类汽车:奥迪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、这些类都有哪些参数?
自由发挥,查资料。