>>楼上俩者都是答非所问呀,
>>我问的是 C++ 和 Delphi的问题。
晕倒!我又不是让你看Java,而是看思路。Java有模式,难道Delphi就没有了??
http://www.delphibbs.com/delphibbs/dispq.asp?lid=0596317
Interface 是从 D3/D4 就有的,但是到了 D6 已经发展得如火纯青。
在 MS 方案中,Interface 是 COM 对象的基石,
在 Java 中,Interface 是 多重继承的替代品。
在 Delphi 中,Interface 是上述两者的结合。是用来开发和调用 COM 的手段,
也可以用来增强 Object Pascal 的语言功能。使得 Object Pascal 如 Java 一样可以
用 Interface 来实现多重继承的功能。
please look at "来自:yysun, 时间:2001-9-14 3:58:00, ID:624988"
下面的例子演示了多接口继承以及缺省实现:
type
IMyInterfaceA = interface
function GetNum:Integer;
end;
IMyInterfaceB = interface
function CalNum(const N:Integer):Integer;
end;
IMyInterfaceC = interface
function Big(const N1,N2:Integer):Boolean;
end;
TMyBaseClass=class(TObject,IMyInterfaceB)
function QueryInterface(const IID: TGUID;
out Obj): HResult;
stdcall;
function _AddRef: Integer;
stdcall;
function _Release: Integer;
stdcall;
function CalNum(const N:Integer):Integer;
end;
TMyClass=class(TMyBaseClass,IMyInterfaceA,IMyInterfaceC)
function GetNum:Integer;
function Big(const N1,N2:Integer):Boolean;
constructor Create;
destructor Destroy;
override;
end;
{ TMyBaseClass }
function TMyBaseClass.QueryInterface(const IID: TGUID;
out Obj): HResult;
begin
Result:=0;
end;
function TMyBaseClass._AddRef: Integer;
begin
Result:=0;
end;
function TMyBaseClass._Release: Integer;
begin
Result:=0;
end;
function TMyBaseClass.CalNum(const N: Integer): Integer;
begin
Result:=N*2;
end;
{ TMyClass }
function TMyClass.Big(const N1, N2: Integer): Boolean;
begin
Result:=N1>N2;
end;
constructor TMyClass.Create;
begin
end;
destructor TMyClass.Destroy;
begin
inherited;
end;
function TMyClass.GetNum: Integer;
begin
Result:=123;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
A:TMyClass;
B:IMyInterfaceB;
begin
A:=TMyClass.Create;
B:=A;
ShowMessage('A.GetNum: '+IntToStr(A.GetNum)
+#13#10'A.Big: '+BoolToStr(A.Big(12,34))
+#13#10'B.CalNum: '+IntToStr(B.CalNum(12)));
end;