面向对象-继承问题(100分)

  • 主题发起人 deardragon_2002
  • 开始时间
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
请问子类的inherited 后面有时候要跟上父类函数的名字?
什么时候必须跟,什么时候可以不必?
 
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
跟不跟没有什么关系的! 跟的话主要为了传参或者返回父类函数的执行结果!
 
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
我今天上午,做的父类是函数(function),子类不跟,结果编译不过,呵呵
父类是函数(function),子类是不是必须要跟的啊?
 
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
Function的话要 Result := Inherited 父类的方法;
Inherited后面不跟函数,编译器会寻找最相近的函数.
指明的话就是具体的了
 
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
我最关心的是
Function的话,子类里只有一个Inherited,后没有跟父类的方法,可以吗?
谢谢
 
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我最关心的是
Function的话,子类里只有一个Inherited,后没有跟父类的方法,可以吗?

有参数就带! 无参就不必了!
 
G

gaobangsheng

Unregistered / Unconfirmed
GUEST, unregistred user!
function時,用於到得返回值.另外,寫函數名,可以傳參數,或者改變所調用的父類方法.
比較靈活啊
 
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
做了个demo,结合vcl代码,发现有参没参
只要是 Function的话,子类都必须带!
 
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
TParent = class
private
public
function ParentMethod: Boolean
virtual;
end;

TChild = class(TParent)
private
public
function ParentMethod: Boolean
override;
end;
 
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
下面编译不过,哪位高手能给个合理解释?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

TParent = class
private
public
function ParentMethod: Boolean
virtual;
end;

TChild = class(TParent)
private
public
function ParentMethod: Boolean
override;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TParent }

function TParent.ParentMethod: Boolean;
begin
Result := True;
end;

{ TChild }

function TChild.ParentMethod: Boolean;
begin
inherited;
end;

end.
 
C

creation-zy

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TParent = class
public
function FFF: Boolean
virtual;
procedure AAA
virtual;
end;

TChild = class(TParent)
public
function FFF: Boolean
override;
procedure AAA
override;
end;

{ TParent }

procedure TParent.AAA;
begin
end;

function TParent.FFF: Boolean;
begin
Result := True;
end;

{ TChild }

procedure TChild.AAA;
begin
inherited
//对没有返回值的方法,不带名字的inherited调用没有任何问题
end;

function TChild.FFF: Boolean;
begin
inherited FFF
//只有带名字才能过——估计是Delphi编译器本身的局限,再较真就去问CodeGear吧...
Result:=false;
end;
 
D

deardragon_2002

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部