Was sind Borland C ++ virtuelle Konstruktoren?
Posted: 21 Feb 2025, 22:26
Jetzt wissen wir, dass C ++ - Konstruktoren nicht virtuell sein können. Aber heute habe ich etwas Seltsames entdeckt: Der Borland -Compiler (BCC64) scheint sich positiv gegenüber virtuellen Konstruktoren und tatsächlich auch ihrer VCL -Bibliothek zu ergeben (ebenfalls (auch deren VCL -Bibliothek, rad Studio 12.2):
class PASCALIMPLEMENTATION TGraphicControl : public TControl
{
typedef TControl inherited;
private:
Vcl::Graphics::TCanvas* FCanvas;
MESSAGE void __fastcall WMPaint(Winapi::Messages::TWMPaint &Message);
protected:
virtual void __fastcall Paint();
__property Vcl::Graphics::TCanvas* Canvas = {read=FCanvas};
public:
__fastcall virtual TGraphicControl(System::Classes::TComponent* AOwner);
__fastcall virtual ~TGraphicControl();
};
< /code>
Infolgeclass MyControl : public TGraphicControl
{
public:
MyControl(TComponent *Owner);
void __fastcall Paint() override;
};
< /code>
Der Compiler gibt diese Warnungen aus: < /p>
MyControl.h(18): 'MyControl' überschreibt eine Mitgliedsfunktion ist jedoch nicht mit 'override'
vcl.controls.hpp(2642): Die überschreibende virtuelle Funktion ist hier < /p>
< /blockquote>
Weird! Ist das eine Delphi -Sprachweiterung? Und wenn ja, welche Art von virtueller Mitgliedsfunktion wird der Compiler vom virtuellen Konstruktor generieren? Oder ist es nur eine Inkonsistenz in der Compiler -Implementierung?
Code: Select all
Vcl.Controls.hpp
class PASCALIMPLEMENTATION TGraphicControl : public TControl
{
typedef TControl inherited;
private:
Vcl::Graphics::TCanvas* FCanvas;
MESSAGE void __fastcall WMPaint(Winapi::Messages::TWMPaint &Message);
protected:
virtual void __fastcall Paint();
__property Vcl::Graphics::TCanvas* Canvas = {read=FCanvas};
public:
__fastcall virtual TGraphicControl(System::Classes::TComponent* AOwner);
__fastcall virtual ~TGraphicControl();
};
< /code>
Infolgeclass MyControl : public TGraphicControl
{
public:
MyControl(TComponent *Owner);
void __fastcall Paint() override;
};
< /code>
Der Compiler gibt diese Warnungen aus: < /p>
MyControl.h(18): 'MyControl' überschreibt eine Mitgliedsfunktion ist jedoch nicht mit 'override'
vcl.controls.hpp(2642): Die überschreibende virtuelle Funktion ist hier < /p>
< /blockquote>
Weird! Ist das eine Delphi -Sprachweiterung? Und wenn ja, welche Art von virtueller Mitgliedsfunktion wird der Compiler vom virtuellen Konstruktor generieren? Oder ist es nur eine Inkonsistenz in der Compiler -Implementierung?