一个很简单的问题,看看错在哪了(50分)

  • 主题发起人 主题发起人 threeone
  • 开始时间 开始时间
T

threeone

Unregistered / Unconfirmed
GUEST, unregistred user!
1.关于override
unit Unit1;

interface

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

type
ta=class
private
public
function add(s1,s2:integer):integer;virtual;
end;

tb=class(ta)
private
public
function add(s1,s2:integer):integer;override;
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function ta.add(s1,s2:integer):integer;
begin
result:=s1+s2;
end;



function tb.add(s1,s2:integer):integer;
var
a:integer;
begin
inherited add(s1,s2);
a:=3;
result:=result+a;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
//a:ta;
b:tb;
begin
b:=tb.Create;
//a:=ta.Create;
i:=b.add(4,3);
showmessage(inttostr(i));

end;

end.

2.add( /var/ s1,s2:integer) //加var和不加有什么区别???请具例

 
使用VAR和不使用VAR,一个是在函数内修改的数据在函数外有效,一个是在函数外部无效。
在函数外有效就是说:传入A:=3,B:=4两个数后,在函数里修改了A:=30,B:=40后退出函数后再访问A、B的值就是30和40,如果无效就是无论你的函数内怎样修改但退出函数后A、B的值仍是3和4。
 
function ta.add(s1,s2:integer):integer;
begin
result:=s1+s2;
end;
删除掉,virtual是形成虚拟定义
 
那第一个问题呢?
那些代码错在哪了?
看了几天都不知道,郁闷!
 
虚函数应该有函数体吧!
静态函数才没函数体的
 
哎!
怎么没人回帖?
太简单了吗?
 
改了一下!
unit Unit1;

interface

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

type
ta=class
function add(s1,s2:integer):integer;virtual;
end;
tb=class(ta)
function add(s1,s2:integer):integer;override;
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function ta.add(s1,s2:integer):integer;
begin
result:=s1+s2;
end;
function tb.add(s1,s2:integer):integer;
begin
inherited add(s1,s2);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
b:tb;
begin
b:=tb.Create;
i:=b.add(4,3);
showmessage(inttostr(i));
end;

end.
//结果显示436220,为什么不是7呢?
//难道function不能inherited
//procedure是可以的
 
function tb.add(s1,s2:integer):integer;
begin
result:= inherited add(s1,s2)
<== 少了返回值
end;
 
多人接受答案了。
 
后退
顶部