现在有一个类继承自TComponentTA = class(TComponent)
    private
    public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
    end;constructor TA.Create(AOwner: TComponent);
begin
    inherited;
    //其他代码
end;
请问可不可以把构造函数增加一个参数,改成类似这样:
constructor Create(AOwner: TComponent; sa: string);
begin
    //这里该怎么写?
end;

解决方案 »

  1.   


    这么写有个警告:
    W1010 Method 'Create' hides virtual method of base type 'TComponent'
      

  2.   

    你的写法错了!
    不是constructor Create(AOwner: TComponent); override;
    应该是constructor Create(AOwner: TComponent); overload;然后再实现部分写
    inherited Create(AOwner);
    就可以了!
      

  3.   

    constructor Create(AOwner: TComponent; sa: string); reintroduce;
      

  4.   

    楼上的方法可以。另外,也可以这样:
    TA = class(TComponent)
        constructor Create(AOwner: TComponent); overload; override;
        constructor Create(AOwner: TComponent); overload;
        destructor Destroy; override;
      private
        // ...
      public
        // ...
    end;Delphi允许类有多个构造函数,名字也可以重载。
    如何使用,取决于你的设计目标。
      

  5.   

    没复制全,应该是:
      constructor Create(AOwner: TComponent); overload; override;
      constructor Create(AOwner: TComponent; sa: string); overload;

      

  6.   


    [DCC Warning] Project1.dpr(34): W1010 Method 'Create' hides virtual method of base type 'TComponent'
      

  7.   


    哥们儿你试一下,第二个构造函数同样也是这个提示:
    [DCC Warning] Project1.dpr(35): W1010 Method 'Create' hides virtual method of base type 'TComponent'另外我不需要默认的那个构造函数目前为止看来四楼的哥们是正解,用reintroduce。
      

  8.   

    警告可以不理,去掉警告加reintroduce
      

  9.   

    前面说了,如何使用,取决于你的设计目标。
    用reintroduce,相当于派生类隐藏了基类的构造函数。
    用两个(多个也行)构造函数可以做更复杂的控制,比如一个创建普通实例,另一个创建特化的实例,Delphi创建类的实例时,并不自动调用类的构造函数(不象C++),所以构造类实例的过程可以自己灵活控制。