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这个方法啊;;;   郁闷了

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    mo:TMobject;
    begin
    mo:=TMobject2.Create; // 这样就对了
    mo.ShowMsg;
    end; 还有这个
    procedure TMobject.ShowMsg;
    begin
    TMobject2(Self).ShowMMessage; // 哪有这样写的代码的阿???
    end; 
      

  2.   

    没有错
      TMObject=class(Tobject) 
      public 
         procedure ShowMsg; 
      end;   TMobject2=class(TMobject) 
      public 
         int:integer; 
         procedure ShowMMessage; 
      end; 
    有int这个变量,有ShowMMessage这个方法
      

  3.   

    你的代码的思路太混乱做为基类的TMObject 的实现方法
    procedure TMobject.ShowMsg; 
    begin 
        TMobject2(Self).ShowMMessage; 
    end; 
    如何能保证当前的实例是有TMobject2来创建?
    .......可参考刘艺《面向对象编程思想》
      

  4.   

    呵呵,这个只能这样理解:
    TMObject中没有int:integer成员,但强制转化为了TMobject2(存在int:integer)成员,那么把TMObject的对象强制转化为TMobject2类型,那么就以TMobject2的内存“布局”来访问TMObject的对象所占用的内存,而访问int成员时,实现访问的是其它的内存空间,而这个内存空间其实Delphi编辑器并没有保护起来,所以也没有出错!