函数返回类导数

时间:2010-11-05 17:52:46

标签: delphi class function

我有CObject作为主类,CRock,CDesk,CComputer作为CObject的派生。我想编写一个读取类枚举的函数(整数可能类似于OBJECT_COMPUTER)并返回特定的类型。

示例:

function createObject( iType : Integer ) : CObject;
begin
  case iType of
    OBJECT_ROCK : Result := CRock.Create();
    OBJECT_DESK : Result := CDesk.Create(); 
  end;
end;

所以我可以像这样使用它:myRock:= createObject(OBJECT_ROCK);

现在我的问题是返回的对象是主类父类,我不能在'myRock'上使用Rock函数而没有从CObject到CRock的类型转换'createObject(OBJECT_ROCK)'我不希望有3每个子类的函数。有任何想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:7)

如果我理解正确,你可以使用抽象方法在基类上声明派生功能的框架,然后在每个派生类中覆盖并实现该方法。

type
  CObject = class
    procedure DoIt; virtual; abstract;
  end;
  CRock = class(CObject)
    procedure DoIt; override;
  end;
  CDesk = class(CObject)
    procedure DoIt; override;
  end;


var
  myRock: CObject;
begin
  myRock := createObject(OBJECT_ROCK);
  myRock.DoIt;
  myRock.Free;
end;

在上面的示例中,'myRock'实例上的'DoIt'调用将正确解析为该类的方法。

如果这与所有关于抽象方法here的阅读相关。

答案 1 :(得分:1)

与之前的例子类似,但更像是这样。我们称之为继承,多态。

type
  TcObject = class
    procedure DoIt; virtual; abstract;
  end;

  TcRock = class(CObject)
    procedure DoIt; override;
  end;

  TcDesk = class(CObject)
    procedure DoIt; override;
  end;


var
  myRock: TcObject;
begin
  myRock := TcRock.Create;  //Inherits from TcObject and instantiate TcRock class.
  myRock.DoIt; //Will automaticall call TcRock.Doit --Polymorphism
  myRock.Free;
end;