gcc -Woverloaded-virtual
David Faure
faure at kde.org
Wed Nov 21 15:18:37 GMT 2007
On Wednesday 21 November 2007, Matthias Kretz wrote:
> On Wednesday 21 November 2007, David Faure wrote:
> > What we're missing is a way to say "yes I wanted to hide this method from
> > the base class"...
>
> Hiding a method from a base class is not possible anyway as you can still cast
> down and then call the method. It kind of works for value based classes since
> those are normally not casted down, but for all pointer-based (i.e. QObject)
> classes I believe you should not hide a method and get a warning if you do
> (also for non-virtual functions).
Well that's the theory :)
In practice the base class method doesn't always make sense. Example:
/d/kde/src/4/kdelibs/kdeui/actions/kselectaction.h:217: warning: ‘virtual void KSelectAction::addAction(QAction*)’ was hidden
/d/kde/src/4/kdelibs/kdeui/actions/krecentfilesaction.h:98: warning: by ‘void KRecentFilesAction::addAction(QAction*, const KUrl&, const QString&)’
Sure you could call KSelectAction::addAction even on a KRecentFilesAction, but you don't want to... you want to associate a url with the action. This is documented, too.
/**
* Adds \a action to the list of URLs, with \a url and title \a name.
*
* Do not use addAction(QAction*), as no url will be associated, and
* consequently urlSelected() will not be emitted when \a action is selected.
*/
void addAction(QAction* action, const KUrl& url, const QString& name);
So here the hiding is good... it's actually an example of why the hiding feature exists in the first place...
--
David Faure, faure at kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).
More information about the kde-core-devel
mailing list