关于类接口的问题 欢迎大家讨论(200分)

  • 主题发起人 主题发起人 2843223
  • 开始时间 开始时间
2

2843223

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有两个不同的类 例如飞机类 大炮类
那么它们存在一个公共的接口 例如 飞机、大炮的弹药,
他们都有一个同样类型的接口,这样 飞机可以直接把弹药通过接口
传递个大炮,方便运输。
那么这个接口怎么编写呢。最好给出代码例子 谢谢各位高手
 
我顶你个肺呀
 
问得好,你能否精细化描述一下公共接口,有几个方法
 
就说一个吧先

首先说虽然飞机、大炮都属于武器,但是不能归结到一个类中,这是必然的。
那么为了传送弹药就必须 做一个接口。可以让飞机给大炮传送弹药,也可以人工给
飞机传送弹药,当然大炮也是一样的,这样就需要一个接口例如
做两个属性 1、炮弹大小 2、传送的速度,,当然还有很多就不说了。
现在的问题是怎么做这两个属性呢
 
呵呵,楼主还是好好找本接口的书看看吧
 
能否介绍一本
 
刘艺的面对对象编程思想,里面有讲到接口的应用
 
当然有的介绍使用interface,,
是否能给出一个实例呢
 
IAmmoSender = interface //弹药传送者
function SendingAmmo(ASize: Integer) Byte;
end;

IWeapon = interface //武器类
function GetAmmoSize: Integer;
function LoadAmmo(ASender: TAmmoSender; ASize: Integer): Byte;
end;
//说明一下,让函数返回Byte是我的习惯

to nicai_wgl:你是否也练练手?
 
这个如何?

type

IAmmoSender = interface //接口:弹药传送者
function SendAmmo(ASize: Integer) Byte;
end;

IWeapon = interface //接口:武器
function GetAmmoSize: Integer;
function LoadAmmo(ASender: TAmmoSender; ASize: Integer): Byte;
end;
//说明一下,让函数返回Byte是我的习惯

TWeapon = class(TObject, IWeapon) //支持 IWeapon 接口的武器类
function GetAmmoSize: Integer; virtual;abstract;
function LoadAmmo(ASender: TAmmoSender; ASize: Integer): Byte; virtual;abstract;
end;

TBattlePlan = class(TWeapon, IAmmoSender) //支持 IWeapon 、IAmmoSender 接口的飞机类
function GetAmmoSize: Integer;
function LoadAmmo(ASender: TAmmoSender; ASize: Integer): Byte;
function SendAmmo(ASize: Integer) Byte;
end;

TPerson = class(TObject, IAmmoSender) //支持 IAmmoSender 接口的人类
function SendAmmo(ASize: Integer) Byte;
end;

TCannon = class(TWeapon) //支持 IWeapon 接口的大炮类
function GetAmmoSize: Integer;
function LoadAmmo(ASender: TAmmoSender; ASize: Integer): Byte;
end;

----月夜风筝
 
icc 写的还是不错的。。
但是怎么使用呢。
飞机作为一个类,应该有接受弹药的属性
 
这是delphi的不方便处,定义Interface类型的东西,虽然也可以定义属性,但不是很方便,我用GetAmmoSize来代替了你说的那个属性功能
 
接受弹药从构词上说,是个动词为主的短语,不适合做属性
你说的是不是弹药型号?
 
呵呵,果然是高手,
那么作为人类开始按照要求给飞机传送弹药,那么代码怎么写呢
 
谢谢。。
我明白了。。 多谢指导。。等一下散分
 
关于接口interface这里有比较好的文章,是台湾的高手的总结,大家可以看看
http://delphi.ktop.com.tw/board.html?cid=31&fid=79&tid=28754
 
这个不再属于接口问题了
飞机.LoadAmmo(人, 44型导弹) //这是调用端
其中将会调用 人.SendAmmo(44) 这个方法
感觉这里才是最复杂的,因为要包含人把弹药送到飞机上去,和在飞机上装好弹药两个子过程,这个SendAmmo函数可能也需要加上一个接收者才行,不加的话也能行,那就只能由人把弹药送到入口,飞机自己完成下一步
 
这是让人头痛的地方,所以很迷茫呀
 
这么容易白赚1笔大钱呀,呵呵
不过你这问题比较有意思的 ~ ~ !
KTop是个好网站,台湾人做起学术问题来比大陆认真多了!
 
那么如果把
function SendingAmmo(ASize: Integer) Byte;
改为
function SendingAmmo(ASize: Integer; AReceiver: TWeapon) Byte;
这样是否就没有缺陷了,我觉得好一些
 
后退
顶部