Re: LoadString overwrite
On Tue, 12 Sep 2006 15:39:00 +0100, "David Webber"
<dave@musical.demon.co.uk> wrote:
However there are lots of things you can do using inheritance quite apart
from polymorphism. The advatage of derivation is that (in the above
example) I can write
MyElementArray array;
an then all the methods of std::vector are available without further ado, as
well as any extra methods of MyElementArray.
I often found I wanted to restrict the interface so would use private
inheritance instead, employing using-declarations to expose just the
interface I wanted, in addition to writing new member functions. My
thinking was that the derived class could think of itself as a std::vector,
which was convenient, while users would be restricted to the interface the
derived class exposed. Then I found out that private inheritance cannot
prevent a derived class from overriding a virtual function in the private
base class, so I started to prefer true containment over private
inheritance, even for classes like std::vector which contain no virtual
functions. Using member variables eliminates all surprises. Besides the
virtual dtor issue, another thing to be very careful of in a class like
MyElementArray that inherits std::vector publicly is not to write a
function that does things above and beyond what a std::vector function
does; for example, writing my_push_back that updates a parallel data
structure still leaves push_back available to the user, and that might not
be appropriate.
--
Doug Harrison
Visual C++ MVP