TMObject=class(Tobject)
public
procedure ShowMsg;
end; TMobject2=class(TMobject)
public
int:integer;
procedure ShowMMessage;
end;
var
Form1: TForm1;implementation{$R *.dfm}
procedure TMobject.ShowMsg;
begin
TMobject2(Self).ShowMMessage;
end;procedure TMobject2.ShowMMessage;
begin
int:=8086;
MessageBox(0,Pchar(InttoStr(int)),'123',MB_OK);
end;procedure TForm1.Button1Click(Sender: TObject);
var
mo:TMobject;
begin
mo:=TMobject.Create;
mo.ShowMsg;
end;请问这个程序会出错吗?
我当时认为是绝对出错,但是这个程序并没有出错,一切正常,,,那是怎么回事啊 TMobject没有int这个变量啊
也没有ShowMMessage这个方法啊;;; 郁闷了
public
procedure ShowMsg;
end; TMobject2=class(TMobject)
public
int:integer;
procedure ShowMMessage;
end;
var
Form1: TForm1;implementation{$R *.dfm}
procedure TMobject.ShowMsg;
begin
TMobject2(Self).ShowMMessage;
end;procedure TMobject2.ShowMMessage;
begin
int:=8086;
MessageBox(0,Pchar(InttoStr(int)),'123',MB_OK);
end;procedure TForm1.Button1Click(Sender: TObject);
var
mo:TMobject;
begin
mo:=TMobject.Create;
mo.ShowMsg;
end;请问这个程序会出错吗?
我当时认为是绝对出错,但是这个程序并没有出错,一切正常,,,那是怎么回事啊 TMobject没有int这个变量啊
也没有ShowMMessage这个方法啊;;; 郁闷了
var
mo:TMobject;
begin
mo:=TMobject2.Create; // 这样就对了
mo.ShowMsg;
end; 还有这个
procedure TMobject.ShowMsg;
begin
TMobject2(Self).ShowMMessage; // 哪有这样写的代码的阿???
end;
TMObject=class(Tobject)
public
procedure ShowMsg;
end; TMobject2=class(TMobject)
public
int:integer;
procedure ShowMMessage;
end;
有int这个变量,有ShowMMessage这个方法
procedure TMobject.ShowMsg;
begin
TMobject2(Self).ShowMMessage;
end;
如何能保证当前的实例是有TMobject2来创建?
.......可参考刘艺《面向对象编程思想》
TMObject中没有int:integer成员,但强制转化为了TMobject2(存在int:integer)成员,那么把TMObject的对象强制转化为TMobject2类型,那么就以TMobject2的内存“布局”来访问TMObject的对象所占用的内存,而访问int成员时,实现访问的是其它的内存空间,而这个内存空间其实Delphi编辑器并没有保护起来,所以也没有出错!