父类有构造函数Create,子类有2个重载的构造函数Create(AA:integer),Create(AB:String),但是父类不带参数的构造函数Create也被子类继承,我现在要屏蔽掉这个无参数的Create,怎么做?

解决方案 »

  1.   

    将你类的无参数的Create覆盖OVERRIDE(有必要可以加 reintroduce)
    然后这个CREATE自动调用Create(AA:integer),Create(AB:String)中的一个constructor TC1.Create;
    begin
      Create(0);
      //Create('');
    end;-----------
    要不
    constructor TC1.Create;
    begin
      raise Exception.Create('不允许调用该构造函数');
    end;
      

  2.   

    能重载啊,参数名称和类别都不一样啊!
    “屏蔽父类的方法, 你不重新声明就行了”,子类没有单独声明无参数Create的方法,只声明了另外2个重载的Create构造函数,但是对于子类的使用者而言,依然能够看到从父类继承下来的那个无参数的构造函数,哪位指点12
      

  3.   

    你可以写几个构造函数啊,比如 CreateEx。
      

  4.   

    TA = class
      public
        constructor Create;
      end;  TB =class(TA)
      public
        constructor Create(A: integer); overload;
        constructor Create(A: String); overload;
      end;我要求在创建TB的实例的时候,见不到不带参数的Create构造函数。说的够明白了吧
      

  5.   

    TA = class
      public
        constructor Create;
      end;  TB =class(TA)
      public
        constructor Create(A: integer); overload;
        constructor Create(A: String); overload;
      end;
    我要求在实作TB的时候,类使用者见不到无参数的Create构造函数,说的够明白了吧
      

  6.   

    但是没有明白,这样有什么用啊。即然你不想用没有参数的create那么你在调用的时候自然会
    给参数了,那这样做还有什么用啊。
      

  7.   

    不好意思,没看清一个是Integer,  一个是string;
    你把TA 的构造函数放到proected 下面不就行了,  当然不能在同一单元
      

  8.   

    主要目的不想让类用户访问到不该使用的构造函数(这里为没有参数的Create)。
    To:DWGZ()  类TA需要创建实例而不是作为虚类,所以不能这么做问题还是没有解决,大家想想办法啊?Delphi的OO就这么弱啊
      

  9.   

    不要说Delphi的 OO  就这么差, 它除了C++  运算符重载做不到其它基本上都行甚至超过你这种情况很难实现,  主要是你那个overload在作怪,  因为B实际上你已经有了三个create了,你用一个create试试, 不要加overload; 
      

  10.   

    但是对于TB,我的确需要定义2个不同的构造函数,必须用overload否则无法定义;
    如果单用一个带参数的构造函数,可以不加overload,这样就能够hide父类的无参数构造函数
      

  11.   

    不要说Delphi的 OO  就这么差, 它除了C++  运算符重载做不到其它基本上都行甚至超过你这种情况很难实现,  主要是你那个overload在作怪,  因为B实际上你已经有了三个create了,你用一个create试试, 不要加overload; --->老大你又沒搞錯,在OO上,Delphi能與C++比,Delphi最多也就是借用C++的一些基本的原理,
    再自己添油加醋一番,就有了OP,
      

  12.   

    TA = class
      public
        constructor Create;
      end;  TB =class(TA)
      public
        constructor Create(A: integer); overload;
        constructor Create(A: String); overload;
      end;
    这样的声明在delphi中是无法通过的,因为TObject类的Create方法是静态的。
    肯定会出现编译错误,但是我也不知道为什么TComponent能够从TPersistent继承,而且还可以constructor Create(AOwner: TComponent);virtual这样声明。关注。
      

  13.   

    笨小子真是乱说,“因为TObject类的Create方法是静态的”,谁告诉你的?自己去看vcl源码
      

  14.   

    to: cgh93829(power) 
    你老用C那怎么转到D上来了,  是不是觉得VC太难了,BCB 又没市场,  你说这话你就不能在D 版呆了, 砖头,  口水会把你淹死, 不过我不会,  谁叫俺喜欢  C 呢
      

  15.   

    笨小子真是乱说,“因为TObject类的Create方法是静态的”,谁告诉你的?自己去看vcl源码静态-->不是Static,而是說TObject的Create不是Virtual的,在其子類中不用OverLoad就出
    錯,TComponent中的Create是帶參數的VirtualDWGZ()--->我只是覺得奇怪!
      

  16.   

    Virtual的方法是用override来覆盖,和overload有什么关系?!
      

  17.   

    從OO的角度來看,在Delphi的OP中是無法實現的,你看看TObject/TCompant中的Create就會發現,Create不是Virtual的,你根本無法OverRide,我看是無法實現了!