pure virtual function in a c++builder TFrame

80 Views Asked by At

C++Builder 10.4.2

I created a TFrame with a pure virtual function. Then derived another TFrame from that one, but did not override the base class virtual function.

I expected to get compiler errors, but did not.

Is the behavior not implemented in VCL classes?

this is code:

    // create a frame from File/New..., add a pure virtual function
    class TFrame4 : public TFrame
    {
    __published:    // IDE-managed Components
    private:    // User declarations
    public:     // User declarations
        __fastcall TFrame4(TComponent* Owner);

        virtual void func() = 0;
    };
    extern PACKAGE TFrame4 *Frame4;

    // derive a frame from it, put it on the main form. compile/run 
    without error
    class TFrame5 : public TFrame4
    {
    __published:    // IDE-managed Components
    private:    // User declarations
    public:     // User declarations
        __fastcall TFrame5(TComponent* Owner);
    };
    extern PACKAGE TFrame5 *Frame5;
1

There are 1 best solutions below

2
Tim Palo On

This occurs because TFrame is created by the VCL framework, which is written in Delphi. So the object never meets the C++ 'new' keyword.

Try to create a "dummy" object, isolated in a separate namespace. This object will never really be created but it suffices to trigger the C++ compiler test for concrete usage of abstract classes.

For example:

namespace Test {
    // this will never really created
    new TFrame5( nullptr ); // <- should trigger an error
}

See also:

https://quality.embarcadero.com/browse/RSP-28329

Regards