|
|
通过类的空(NULL)实例访问类成员方法,什么情况下才报错? |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
C++ @ vc6
#include "stdafx.h"
#include
class T
{
public:
void foo1() {cout<<"foo1 : Hello,world!"<foo1(); //-->答案 不会报错,正常显示信息 -- foo1 定位可以由类信息决定 <--
pt->foo2(); //-->答案 会报访存错, foo2 定位需要查对象中 vptr 对应的 vtable <--
//delete pt;
}
.net c# @ vs2003
using System;
namespace ConsoleApplication3
{
class T
{
public void foo1(){ Console.WriteLine("foo1 : Hello,world!");}
public virtual void foo2(){ Console.WriteLine("T foo2 : Hello,Girl!");}
}
class T1 : T
{
public override void foo2() {Console.WriteLine("T1 foo2 : Hello,My Girl!"); }
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
T pt = null;
pt.foo1(); //-->答案 报错 <--
pt.foo2(); //-->答案 报错 <--
}
}
}
object pascal @ delphi6
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
T = class
public
procedure foo1;
procedure foo2; virtual;
end;
T1 = class (T)
public
procedure foo2; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ T }
procedure T.foo1;
begin
ShowMessage('foo1 : Hello,world!');
end;
procedure T.foo2;
begin
ShowMessage('T foo2 : Hello,Girl!');
end;
{ T1 }
procedure T1.foo2;
begin
ShowMessage('T1 foo2 : Hello,My Girl!');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
pt : T;
begin
pt := nil;
pt.foo1; //-->答案 正常工作,显示信息 <--
pt.foo2; //-->答案 报访问地址错 <--
(*
pt := T1.Create;
pt.foo1();
pt.foo2(); *)
end;
end.
Java2 @ eclipse
class T{
public final void foo1(){System.out.println("foo1 : Hello,world!");}
public void foo2(){System.out.println("T foo2 : Hello,Girl!");}
}
class T1 extends T{
public void foo2(){System.out.println("T1 foo2 : Hello,my Girl!");}
}
public class Test {
public static void main(String[] args) {
T pt = null;
pt.foo1(); //-->答案 报错 <--
pt.foo2(); //-->答案 报错 <--
}
}

|
|
相关文章:相关软件: |
|