回 帖 发 新 帖 刷新版面

主题:重写和隐藏基类成员的区别?

请问重写和隐藏基类成员对实用类的对象具体有什么影响?还有virtual基类,派生类可以用override重写。重写之后是不是派生类的对象就不能访问基类的成员了?各位大虾,指教一下吧~

回复列表 (共2个回复)

沙发

FAQ有相关问题索引

板凳

要理解overide,   overload,   inherence的区别 
inherence就是继承,OO里的基本概念。     
  
overide是指派生类中有一个和基类同名的函数(只要同名就算),我们就称“类B     override了类A的fun()成员函数”。overide只能用于虚函数的重写。对于非虚拟函数进行     override     的后果叫做“覆盖”。     
  
overload是指在同一个namespace中,有多个同名但不同参数的函数。不同的类之间不存在overload关系。     
  
因此,override和overload是截然不同的:override发生于派生类与基类之间,而overload只发生于一个类或者namespace的范围之内。     
  
---------------------------------------------------------------     
  
先说override吧,看下面的例子:     
type     
TFigure     =     class     
procedure     Draw;     virtual;     
end;     
TRectangle     =     class(TFigure)     
procedure     Draw;     override;     
end;     
TEllipse     =     class(TFigure)     
procedure     Draw;     override;     
end;     
你看到了吧,最原始的父类TFigure有一个draw方法,然后继承这个类的TRectangle也有一个Draw方法,这个方法与父类的Draw同名,所以就等于重载了父类方法,但这样的重载要求父类的方法是virtual的。     
  
  
再说overload:     
type     
T1     =     class(TObject)     
procedure     Test(I:     Integer);     overload;     virtual;     
end;     
T2     =     class(T1)     
procedure     Test(S:     string);     reintroduce;     overload;     
end;     
看上面的例子,T1有一个Test方法,T2也有一个叫Test的方法,但两个方法名称相同,只是参数不一样,这样为了就需要overload声明,用来证明这个叫Test方法可能有多种不同的调用,编译时是根据参数类型做判断的。     

我来回复

您尚未登录,请登录后再回复。点此登录或注册