Kiedy zapomniałem dodać słowa kluczowe "wirtualne" i "przesłonięcie" ostatnio, oczekiwałbym ostrzeżenia kompilatora, gdy przypadkowo użyłem tej samej nazwy dla procedura w klasie pochodnej. Nie mam nic, a teraz nie rozumiem, dlaczego. Co muszę zrobić, aby uzyskać ostrzeżenia dotyczące ukrywania podstawowych członków i metod?Kompilator nie ostrzega podczas ukrywania zmiennych składowych i/lub procedur
Według this answer (Jim McKeeth, który jest niewątpliwie poprawne):
Jeśli zadeklarować metody w klasie potomka, który ma taką samą nazwę jak metoda w klasie przodek to jesteś ukrywał, że metoda przodka - czyli jeśli masz instancję klasy potomka (która jest określana jako ta klasa), to nie otrzymasz zachowania przodka. Kompilator da ci ostrzeżenie.
Jednak ku mojemu zdziwieniu ten kod nie daje mi ostrzeżenie:
unit Unit1;
interface
{$WARNINGS ON}
{$WARN HIDING_MEMBER ON}
{$WARN HIDDEN_VIRTUAL ON}
// I understand the two lines above are superfluous.
// I put them there to demonstrate that I have tried to enable these
// warnings explicitly.
type
TBase = class
public
SomeMember: integer;
procedure Foo;
end;
type
TDerived = class (TBase)
public
SomeMember: integer;
procedure Foo;
end;
implementation
{ TBase }
procedure TBase.Foo;
begin
end;
{ TDerived }
procedure TDerived.Foo;
begin
end;
end.
używam Delphi XE i mój kompilator mówi, wszystko jest w porządku:
Sprawdzanie zależności projektowych. .. Building Project1.dproj (Debug, Win32) Linia komend dcc dla "Project1.dpr" c: \ program files \ embarcadero \ rad studio \ 8.0 \ bin \ dcc32.exe - $ O- - $ W + - $ YD --no-config -B -Q -AWinTypes = Wiatr ows; WinProcs = Windows; DbiTypes = BDE; DbiProcs = BDE; DbiErrs = BDE -DDEBUG -E "C: \ Wyjście kompilatora" -I "c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ Win32 \ debug"; "c: \ program plików \ embarcadero \ rad studio \ 8.0 \ RaveReports \ Lib ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ debug ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ Imports " ; "C: \ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Dcp"; "c: \ program files \ embarcadero \ rad studio \ 8.0 \ include"; "C: \ Program Pliki \ Raize \ CS4 \ Lib \ RS-XE ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ release ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ RaveReports \ Lib "-LE" C: \ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Bpl "-LN" c: \ program files \ embarcadero \ rad studio \ 8.0 \ bin \ Dcp " -N0" C: \ Dane wyjściowe kompilatora \ DCU "-O" c : \ program files \ embarcadero \ rad studio \ 8.0 \ Imports ";" C: \ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Dcp "; "c: \ program files \ embarcadero \ rad studio \ 8.0 \ include"; "C: \ Program Files \ Raize \ CS4 \ Lib \ RS-XE"; "c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ release "; "c: \ program files \ embarcadero \ rad studio \ 8.0 \ RaveReports \ Lib" -R "c: \ program files \ embarcadero \ rad studio \ 8.0 \ Imports"; "C: \ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Dcp ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ include ";" C: \ Program Files \ Raize \ CS4 \ Lib \ RS-XE ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ release ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ RaveReports \ Lib "-U" c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ Win32 \ debug ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ RaveReports \ Lib ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ debug ";" c: \ program files \ embarcadero \ rad studio \ 8.0 \ Imports ";" C: \ Users \ Public \ Documents \ RAD Studio \ 8.0 \ Dcp ";" c: \ program pliki \ embarcadero \ rad studio \ 8.0 \ include "; "C: \ Program Files \ Raize \ CS4 \ Lib \ RS-XE"; "c: \ program files \ embarcadero \ rad udio \ 8.0 \ lib \ win32 \ release "; "c: \ program files \ embarcadero \ rad studio \ 8.0 \ RaveReports \ Lib" -K00400000 -NB "c: \ program files \ embarcadero \ rad studio \ 8.0 \ bin \ Dcp" -NH "C: \ Users \ Public \ Documents \ RAD Studio \ 8.0 \ hpp "-NO" C: \ Wyjście kompilatora \ DCU "Project1.dpr Success Czas, który upłynął: 00:00:00.2
Domyślam się, że albo ja źle zrozumieć wspomnianą cytat Jim McKeeth czy mam jakieś ustawienie w moim kompilatora, że nie jestem świadomy (Zrobiłem przetestować go na innym komputerze przy okazji, te same wyniki) . Każda pomoc będzie bardzo ceniona.
Podana odpowiedź była błędna, podobnie jak kilka innych odpowiedzi na to pytanie. Naprawiłem niedokładności w tej odpowiedzi. –