From: Benjamin Sobotta <mayday@gmx.net>
To: Steve Graegert <graegerts@gmail.com>
Cc: linux-c-programming@vger.kernel.org
Subject: Re: Virtual functions and destructors
Date: Wed, 22 Mar 2006 23:27:41 +0100 [thread overview]
Message-ID: <200603222327.41672.mayday@gmx.net> (raw)
In-Reply-To: <6a00c8d50603190938v5852f31bhd1a6dfa7262ef83@mail.gmail.com>
On Sunday 19 March 2006 18:38, Steve Graegert wrote:
> On 3/19/06, Shriramana Sharma <samjnaa@gmail.com> wrote:
> > I did not get what is intended to be conveyed by:
> >
> > http://charm.cs.uiuc.edu/users/olawlor/ref/examples/cpp/virtual.cpp
> > http://charm.cs.uiuc.edu/users/olawlor/ref/examples/cpp/virtual_destructo
> >r.cpp
>
> 1. In C++ the virtual keyword identifies to the compiler that a class
> function may be overridden in a derived class. That is, the derived
> class may supply a function of the same name and argument list, but
> with different functionality defined in the function body. In the
> example you linked to the child class has overriden the virtual
> function hello and allows itself to be overridden by declaring its
> function virtual as well. A pointer to a derived class object may be
> assigned to a base class pointer, and a virtual function called
> through the pointer. If the function is virtual and occurs both in the
> base class and in derived classes, then the right function will be
> picked up based on what the base class pointer "really" points at.
>
> 2. Virtual destructors are needed to allow for the destructors for the
> actual object types derived from the base class to be called. Non
> virtual destructors in base classes can result in memory leaks.
>
> \Steve
> -
> To unsubscribe from this list: send the line "unsubscribe
> linux-c-programming" in the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello!
to #1:
I'm not sure if this is right. Functions can always be overloaded. virtual
merely indicates that you want to use dynamic binding. That means that it is
determined at run time rather than compile time which function to run. The
decision will be made based on the type of the actual object rather than the
pointer. If you remove both virtual statements parent will show up twice.
That's because in both cases the pointer is of type parent. In case of
dynamic binding it doesn't matter anylonger, because the function belonging
to the object is executed.
Further I believe that once a function is declared virtual it always stays
that way. Even if in subsequently derived classes it is not explicitly
declared virtual any longer.
Cheers,
Ben
next prev parent reply other threads:[~2006-03-22 22:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-19 15:20 Virtual functions and destructors Shriramana Sharma
2006-03-19 17:38 ` Steve Graegert
2006-03-22 22:27 ` Benjamin Sobotta [this message]
2006-03-23 2:02 ` Shriramana Sharma
2006-03-23 22:00 ` Benjamin Sobotta
2006-03-24 1:07 ` Glynn Clements
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200603222327.41672.mayday@gmx.net \
--to=mayday@gmx.net \
--cc=graegerts@gmail.com \
--cc=linux-c-programming@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).