On 15.03.24 18:31, Christian Kandeler via Development wrote:
> On 3/15/24 18:09, Marc Mutz via Development wrote:
>> I like simple rules. "Overrides should have the same access level as the
>> initial virtual function." is a simple rule.
> 
> But it makes no sense in general. The base class is the interface, and 
> overrides should have the least possible visibility for their purpose.

Let me turn that around and ask you to explain why the specific static 
type should matter when calling a virtual function:

    MyWidget *myw = new MyWidget; // ¹
    QWidget *id = myw;
    QObject *obj = wid;
    obj->event(e); // OK
    wid->event(e); // ERROR: protected
    myw-.event(e); // OK, public again

"Normal" functions never behave that way. Why should virtual functions 
behave so erratically? Users look at the QObject docs, see that there's a 
public event() function and for some reason decide that's the function 
to call. QWidget is-a QObject, so by the Liskov Substitution Principle, 
you should be able to do anything to a QWidget than you can do to a 
QObject. So why can't I call event() on it?

¹ from src/corelib/doc/snippets/events/events.cpp (iow: our docs)

Thanks,
Marc

-- 
Marc Mutz <marc.m...@qt.io>
Principal Software Engineer

The Qt Company
Erich-Thilo-Str. 10 12489
Berlin, Germany
www.qt.io

Geschäftsführer: Mika Pälsi, Juha Varelius, Jouni Lintunen
Sitz der Gesellschaft: Berlin,
Registergericht: Amtsgericht Charlottenburg,
HRB 144331 B

-- 
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to