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